LightOJ1370 Bi-shoe and Phi-shoe(欧拉函数+打表)
题意:
Φ (n)表示长度为小于数字n的和n互质的数的个数,也就是欧拉函数。现在给出n个幸运数字,对于每一个幸运数字,要求的x,使Φ (n)的值大于等于这个幸运数字,求这些x和的最小值。
题解:
打表后暴力
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+100; int E[maxn];//存每个数的欧拉函数 int ispr[maxn];//存素数 int a[maxn],n; void eular () { for (int i=1;i<maxn;i++) E[i]=i; memset(ispr,1,sizeof(ispr)); ispr[0]=ispr[1]=0; E[1]=0; for (int i=2;i<maxn;i++) if (ispr[i]) for (int j=i;j<maxn;j+=i) ispr[j]=0,E[j]-=E[j]/i; } int main () { eular(); int T; scanf("%d",&T); for (int k=1;k<=T;k++) { memset(a,0,sizeof(a)); long long ans=0; scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",a+i); sort(a+1,a+n+1); int p=1; for (int i=1;i<=n;i++) for (int j=p;j<maxn;j++) if (E[j]>=a[i]) { ans+=j;p=j;break; } printf("Case %d: %lld Xukha\n",k,ans); } }