其中μ()函数是莫比乌斯函数,定义是:
如果d=1 , μ(d)=1
如果dd为互异质1p2p2…pk的乘积,则μ(d)=(−1)k
否则,μ(d)=0
所以线性筛莫比乌斯函数往后看,几乎每段代码里都有。
bool is[maxn];
int pri[maxn],miu[maxn];
void init(){//首先把莫比乌斯函数筛出来
miu[1]=1;
for(int i=2;i<=100000;i++){
if(!is[i]){pri[++tot]=i;miu[i]=-1;}
for(int j=1;j<=tot;j++){
int k=pri[j]*i;if(k>100000)break;
is[k]=1;
if(i%pri[j]==0){miu[k]=0;break;}
else miu[k]=-miu[i];
}
}
}