void pre(){
vis[1]=g[1]=f[1]=mu[1]=phi[1]=d[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){
pri[++tot]=i;//质数
phi[i]=i-1;//欧拉函数
mu[i]=-1;//莫比乌斯
d[i]=2;//约数个数
num[i]=1;//最小质因子个数
f[i]=i+1;//约数和
g[i]=i+1;//最小质因子的等比数列
}
for(int j=1;j<=tot;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
mu[i*pri[j]]=0;
num[i*pri[j]]=num[i]+1;
d[i*pri[j]]=d[i]/num[i*pri[j]]*(num[i*pri[j]]+1);
g[i*pri[j]]=g[i]*pri[j]+1;
f[i*pri[j]]=f[i]/g[i]*g[i*pri[j]];
break;
}
phi[i*pri[j]]=phi[i]*phi[pri[j]];
mu[i*pri[j]]=-mu[i];
d[i*pri[j]]=d[i]*2;
num[i*pri[j]]=1;
f[i*pri[j]]=f[i]*f[pri[j]];
g[i*pri[j]]=pri[j]+1;
}
}
}
标签:pre,phi,筛法,int,void,mu
From: https://www.cnblogs.com/hubingshan/p/17916189.html