本文部分公式来自这篇dalao的博客
什么是莫比乌斯函数
现在有一个数(x)。
把这个(x)分解质因数:
(large x=prod_{i=0}^{k}p_i^{t_i})
有:
(large mu (n) =egin{cases} &1; if ; n=1 \ &0 ; if ; exists t_{i}> 1 \ &(-1)^{k} ; if ; forall t_{i}= 1 end{cases})
怎么算莫比乌斯函数
莫比乌斯函数是个积性函数,因此我们可以通过欧拉筛在(O(n))的时间内算出。
代码大概长这样w
int prime[N],p_tot,miu[N];
bool ntPrime[N];
void GetPrime(int n)
{
miu[1]=1;
ntPrime[1]=true;
for(int i=2;i<=n;i++)
{
if(ntPrime[i]==false)
prime[++p_tot]=i,miu[i]=-1;
for(int j=1;j<=p_tot and i*prime[j]<=n;j++)
{
ntPrime[i*prime[j]]=true;
if(i%prime[j]==0)
{
miu[i*prime[j]]=0;
break;
}
miu[i*prime[j]]=miu[i]*miu[prime[j]];
}
}
}
莫比乌斯函数有什么性质
1.(large sum_{dmid n}mu(d) = egin{cases} 1 & ext{ if } n=1 \ 0 & ext{ if } n> 1 end{cases})
证明:
对于第一种讨论(n=1):显然
对于第二种讨论(n>1),我们可以对它的因子进一步分类讨论,分为两类,第一类是这个因子中有某个质因数出现次数超过了两个,那么显然它的(mu=0);对于另外那一部分,我们可以这样写:
(sum_{d|x}μ(d)=sum_{i=0}^kC_k^i*(-1)^i)[注1] (=) ((1+(-1))^k)[注2] (= 0)
注1:我们这里相当于对(x)的质因数做排列组合来组合出(x)的因数
注2:这里运用到了二项式定理,省略了一步,中间省略的步骤为:(sum_{i=0}^kC_k^i*(-1)^i*(1)^{k-i})
证毕
2.(large frac{varphi(n)}{n}=sum_{d|n}frac{μ(d)}{d})
证明:
不会证,会证后补(咕咕咕)
3.莫比乌斯函数是一个积性函数,有(large μ(a*b)=μ(a)*μ(b) quad (gcd(a,b)=1))
扩展:莫比乌斯反演
(large f(n)=sum_{d|n}g(d))
(large g(n)=sum_{d|n}μ(d)*f(frac{n}{d}))
上面两个式子可以互相推导
证明:
我不会证,会了再补(咕咕咕)
可以参考这个dalao的博客