欧拉函数的定义φ(n):小于n的正整数中与n互质的个数。
通式:φ(n)=n*((p1-1)/p1)*((p2-1)/p2)…((pn-1)/pn)
注:p为n的质因子。
即每隔p个有一个不能取(即p的倍数不能取)
又n为质数是φ(n)=n-1
所以可线性推出1~n的欧拉函数
scanf("%d",&n);
for(int i=2;i<=n;i++){
if(!ispri[i]){
prime[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot && prime[j]*i<=n;j++){
ispri[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else
phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}