欧拉函数
递推求欧拉函数phi(i):
for(i=1;i<=maxn;i++) phi[i]=i; for(i=2;i<=maxn;i+=2) phi[i]/=2; for(i=3;i<=maxn;i+=2) if(phi[i]==i) { for(j=i;j<=maxn;j+=i) { phi[j]=phi[j]/i*(i-1); } }
单独求欧拉函数phi(x):
unsigned euler(unsigned x) {//就是公式 unsigned i,res=x; for(i=2;i<(int)sqrt(x*1.0)+1;i++) if(x%i==0) { res=res/i*(i-1); while(x%i==0) x/=i;//保证一定是素数 } if(x>1) res=res/x*(x-1); return res; }