欧拉函数
求小于等于n的数中与n互质的数的数目
求小于等于n的数中与n互质的数的数目
求单个:复杂度O(√n)
int phi(int x){
int ans = x;
for(int i = 2; i*i <= x; i++){
if(x % i == 0){
ans = ans / i * (i-1);
while(x % i == 0){
x /= i;
}
}
}
if(x > 1)
ans = ans / x * (x-1);
return ans;
}
求多个,类似于埃筛
int phi[maxn];
void Oula()
{
phi[1]=1;
for(int i=2;i<maxn;i++){
if(!phi[i]){
for(int j=i;j<maxn;j+=i){
if(!phi[j])
phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
}