1.O()求单点欧拉函数值
int oula(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;
}
2.欧拉筛 不仅能够筛出素数,也能筛出欧拉函数值。
主要思想:
phi(p) = p - 1;
phi(i * p) = phi(i) * p (i % p == 0)
phi(i * p) = phi(i) * (p - 1) (i % p != 0)