例题太多
线筛莫比乌斯函数
莫比乌斯函数的定义
以下内容摘自百度
莫比乌斯函数完整定义的通俗表达:
1.莫比乌斯函数μ(n)μ(n)的定义域是N+N+
2.μ(1)=1μ(1)=1
3.当n存在平方因子时,μ(n)=0μ(n)=0
4.当n是素数或奇数个不同素数之积时,μ(n)=−1μ(n)=−1
5.当n是偶数个不同素数之积时,μ(n)=1μ(n)=1
表达式如下:
μ(x)=⎧⎩⎨⎪⎪1(−1)n0x=1x=p1p2...pn其他情况μ(x)={1x=1(−1)nx=p1p2...pn0其他情况
莫比乌斯函数的性质
有很多神奇的性质,这里只需要用到它的积性,其他的我会在莫比乌斯反演的总结里提到。
这玩意儿的积性很容易证,分类讨论一下就好了,博主懒得写了。。。
莫比乌斯函数的线筛
很容易讨论。。。
设T=i×p[j]T=i×p[j]。
1.当TT为质数时,根据定义;
2.当TT拥有多个最小质因数(即)时,根据定义μ(T)=0μ(T)=0;
3.当TT的最小质因数只有一个(即)时,显然此时gcd(i,p[j])=1gcd(i,p[j])=1,根据μ(x)μ(x)的积性,μ(T)=μ(i)×μ(p[j])=−μ(i)μ(T)=μ(i)×μ(p[j])=−μ(i);
线筛方程也贼简单:
μ(T)=⎧⎩⎨⎪⎪−10−μ(i)T∈Primei mod p[j]=0i mod p[j]≠0μ(T)={−1T∈Prime0i mod p[j]=0−μ(i)i mod p[j]≠0
代码
void getmiu()
{
miu[1]=check[1]=1;
R i,j,t;
for(i=2;i<=N;++i)
{
if(!check[i])miu[i]=-1,p[++p[0]]=i;
for(j=1;j<=p[0];++j)
{
t=p[j]*i;
if(t>N)break;
check[t]=1;
if(i%p[j]==0){miu[t]=0;break;}
miu[t]=-miu[i];
}
miu[i]+=miu[i-1];
}
}