求1到n的欧拉函数值
void get_p(){
P[1]=1;
for (i=2; i<N; i++){
if (!f[i]){ //i是质数
p[++num]=i;
P[i]=i-1;
}
for (j=1; j<=num && i*p[j]<=N; j++){
f[i*p[j]]=p[j]; //i*p[j] 不是质数了
if(i%p[j]==0){P[i*p[j]]=(P[i]*p[j])%Ha; break;} //p[j]是i的约数
else P[i*p[j]]=(P[i]*P[p[j]])%Ha; //P[i*p[j]]=P[i]*P[p[j]]
}
}
}
求某个数的欧拉函数值
long long Phi(int x){
if (x<=3) return x-1;
int ret=x;
for (int i=2; i*i<=x; i++) if (x%i==0){
while (x%i==0) x/=i;
ret=ret/i*(i-1);
}
if (x>1) ret=ret/x*(x-1);
return ret;
}