莫比乌斯函数学习笔记
本文部分公式来自这篇dalao的博客
什么是莫比乌斯函数
现在有一个数\(x\)。
把这个\(x\)分解质因数:
\(\large x=\prod_{i=0}^{k}p_i^{t_i}\)
有:
\(\large \mu (n) =\begin{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_{d\mid n}\mu(d) = \begin{cases} 1 & \text{ if } n=1 \\ 0 & \text{ 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的博客