通式及其证明
要计算一个正整数n的欧拉函数的方法如下:1. 将n表示成素数的乘积: n = p1 ^ k1 * p2 ^ k2 * ... * pn ^ kn(这里p1, p2, ..., pn是素数)
2. PHI(n) = (p1 ^ k1 - p1 ^ (k1 - 1)) * (p2 ^ k2 - p2 ^ (k2 - 1)) * ... * (pn ^ kn - pn ^ (kn - 1))
=n*(p1-1)(p2-1)……(pi-1)/(p1*p2*……pi);
=n*(1-1/p1)*(1-1/p2)....(1-1/pn)
3.详见《白书》p184.
int euler_phi(int n)
{
int m =(int) sqrt(n+0.5);
int ans = n;
for(int i=2;i<=m;i++)
{
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0) n/i;
}
}
if(n>1) ans =ans /n*(n-1);
}