欧拉函数求法(直接求/筛法)及其应用
1.首先推荐一篇博客,人家不让转载,写的不错。
http://blog.csdn.net/sentimental_dog/article/details/52002608#t1
2.欧拉函数主要是用于求解n以内的与n互质的数目。
phi(n)=n*(1-p1)*(1-p2)*(1-p3).....
p1,p2,p3,p4.....是n的质因数(n不为0);
3
(1)直接求解
int phi(int n) { int ans=n; int cph=n; for (int i=2;i*i<=ans;i++) { if (ans%i==0) { ph=ph/i*(i-1); while (ans%i==0) { ans/=i; } } } if (ans!=1) ph=ph/ans*(ans-1); }
2.筛法求解
#define max_ 1000000 int euler[max_]; int phi(int n) { for (int i=1;i<max_;i++) { euler[i]=i; } for (int i=2;i<max_;i++) { if (euler[i]==i) { for (int j=i;j<max_;j+=i) { euler[j]=euler[j]/i*(i-1); } } } }