欧拉函数:给定一个正整数n,在小于等于n的数中,与n互质的数的个数。
关于欧拉函数,有以下几个规律:
1.当n为质数时,euler(n)=n-1.
2.当p与q互质时,euler(p*q)=euler(p)*euler(q).
3.当n等于p^k时,p为质数,euler(n)=p^k-p^(k-1).
对于任意的n,有n=p1^m1*p2^m2*p3^m3……*pk^mk; p1……pk为质数,所以p1^m1……pk^mk都互质
所以euler(n)=euler(p1^m1)*euler(p2^m2)……*euler(pk^mk)
由于规律3,euler(p^k)=(p-1)*p^(k-1)
推理可得:euler(n)=n*(1-1/p1)*(1-1/p2)……*(1-1/pk)
算法实现:利用质因数分解,分解出质因数组合,套用公式即可。
int euler(int n){ int res=n; for(int i=2;i<n;i++){ if(n%i==0){ res=res/i*(i-1); while(n%i==0)n/=i; } } if(n!=1)res=res/n*(n-1); return res; }