函数的定义
莫比乌斯函数μ(n)\mu(n)μ(n)的定义为:
情况 | 函数值 |
---|---|
n=1n=1n=1 | 111 |
n=p1×p2×p3……×pmn=p_1\times p_2\times p_3……\times p_mn=p1×p2×p3……×pm | (−1)r(-1)^r(−1)r |
其他 | 0 |
其中p1p_1p1,p2p_2p2,p3p_3p3,……pm……p_m……pm指的是nnn的mmm个质因数。
注意:这里的p1p_1p1,p2p_2p2,p3p_3p3,……pm……p_m……pm指数都是只有111的,也就是说每个质因数在nnn中只有一个,只要出现了第二个,那么情况就是其他。
定理
对于莫比乌斯函数的和函数在整数nnn处的值F(n)=F(n)=F(n)=∑d∣nμ(d)_{d|n}\mu(d)d∣nμ(d),满足
∑d∣nμ(d)={1,n=10,n>1\sum_{d|n}\mu(d) = \begin{cases}1,&n=1 \\0,&n>1\end{cases}∑d∣nμ(d)={1,0,n=1n>1
证明
n=1n=1n=1时,显然有F(1)=F(1)=F(1)=∑d∣nμ(1)=1_{d|n}\mu(1)=1d∣nμ(1)=1
n>1n>1n>1时,根据积性函数的定义,有F(n)=F(p1a1)F(p2a2)…F(ptat)F(n)=F(p_1^{a_1})F(p_2^{a_2}) \dots F(p_t^{a_t})F(n)=F(p1a1)F(p2a2)…F(ptat),其中,n=p1a1p2a2……ptatn=p_1^{a_1}p_2^{a_2}……p_t^{a_t}n=p1a1p2a2……ptat 是质因数分解。如果能证明F(pk)=0F(p^k)=0F(pk)=0,即有F(n)=0F(n)=0F(n)=0.因为当i≥2i \ge 2i≥2时,μ(pi)=0\mu(p^i) = 0μ(pi)=0,故有
F(pk)=F(p^k)=F(pk)=∑d∣pkμ(d)=μ(1)+μ(p)+μ(p2)+⋯+μ(pk)=1+(−1)+0+0+……+0=0_{d|p^k}\mu(d) = \mu(1)+\mu(p)+\mu(p^2)+\dots+\mu(p^k)=1+(-1)+0+0+……+0 = 0d∣pkμ(d)=μ(1)+μ(p)+μ(p2)+⋯+μ(pk)=1+(−1)+0+0+……+0=0
单个计算
int mobius_function(int n){
if(n==1)return 1;
int ans=0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
n/=i;
ans++;
}
while(n%i==0)return 0;
}
ans+=(n!=1);
return pow(-1,ans);
}
筛法(线性筛)
void mobius(int n){
vis[1]=1;
mob[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){//质数情况
p[++cnt]=i;
mob[i]=-1;
}
for(int j=1;j<=cnt&&p[j]*i<=n;j++){
vis[p[j]*i]=1;
mob[i*p[j]]=(i%p[j]?-mob[i]:0);
if(i%p[j]==0)break;
}
}
}