一、埃氏筛求欧拉函数
const int N=;
int phi[N];
void euler(int n){
for(int i=1;i<=n;i++){
phi[i]=i;
}
for(int i=2;i<=n;i++){
if(phi[i]=i){
for(int j=i;j<=n;j+=i){
phi[j]=phi[j]/i*(i-1);
}
}
}
}
二、欧拉筛求欧拉函数
const int N=;
int phi[N],num[N];
bool isnp[N];
void euler(int n){
int ant=0;
phi[1]=1;
for(int i=2;i<=n;i++){
if(!isnp[i]){
num[++ant]=i;
phi[i]=i-1;
}
}
for(int j=1;j<=ant&&i*num[j]<=n;j++){
isnp[i*num[j]]=1;
if(!i%num[j]){
phi[i*num[j]]=phi[i]*num[j];
break;
}
phi[i*num[j]]=phi[i]*phi[num[j]];
}
}