欧拉函数:在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。
欧拉函数公式:
ϕ(n)=n∏(1−1p)
,其中
p
是可以整除
根据公式,写出如下程序:
求单个数的欧拉函数:
int euler_phi(int n)
{
int res = n;
int m = (int)sqrt(n);
for(int i = 2; i <= m; 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;
}
筛选法求欧拉函数
void euler_phi()
{
for(int i = 1; i < N; i++) phi[i] = i;
for(int i = 2; i < N; i++)
if(phi[i] == i) //成立说明i是素数
for(int j = i; j < N; j += i) //j要从i开始,这样可以处理素数的情况
phi[j] = phi[j] / i * (i-1);
}