标签:
欧拉函数是小于等于n的数中与n互质的数的数目;
通式:
其中p1,p2....pn为xd的所有质因数,x是不为0的整数,
*注意 : 每种质因数只有一个。 比如 12=2*2*3; 那么 φ(12)=12*(1-1/2)*(1-1/3)=4
φ(1)=1 (唯一和 1 互质的书(小于等于1) 就是 1 本身)
若 n 是质数 p 的 k 次幂 ,则有
性质:
(1) 欧拉函数式积性函数,若m,n互质,则有
(2) 当 n 为奇数时
(3) 若 n 为质数
方法一 : 直接求出 n 的欧拉函数
int euler(int n) { int res=n,a=n; for(int i=2;i*i<=a;i++) { if(a%i==0) { res=res/i*(i-1); while(a%i==0) a=a/i; } } if(a>1) res=res/a*(a-1); return res; }
方法二 : 筛选法打欧拉函数表
#define max 10000001 int eular[max]; void init() { eular[1]=1; for(int i=2;i<max;i++) eular[i]=i; for(int i=2;i<max;i++) { if(eular[i]==i) { for(int j=i;j<max;j+=i) eular[j]=eular[j]/i*(i-1); } } }
标签:
原文地址:http://www.cnblogs.com/nefu929831238/p/5729938.html