首页 > 技术文章 > 莫比乌斯反演

zythonc 2020-11-17 17:44 原文

未完善,瞎看看即可

正文

莫比乌斯函数定义为:

\(\mu(n)=\begin{cases}1&(n=1)\\(-1)^r&(n\;有且仅有\;r\;个互不相同的质因子)\\0&(其他情况)\end{cases}\)

那么由定义我们可以推出一个性质:

\(\sum\limits_{d|n}\mu(d)=[n=1]\)

证明

显然这是莫比乌斯函数的和函数,所以它也是个乘性函数

对于一个整数 n 我们显然可以将其唯一分解为 \(n=p_1^{k_1}p_2^{k_2}\dots p_n^{k_n}\)

所以 \(\sum\limits_{d|n}\mu(d)=\sum\limits_{d|p_1^{k_1}}\mu(d)\sum\limits_{d|p_2^{k_2}}\mu(d)\dots\sum\limits_{d|p_n^{k_n}}\mu(d)\)

而对于一个整数 \(m=p^k\)

显然 \(m=\mu(1)+\mu(p)+\dots+\mu(p^k)\)

\(=1+(-1)+0+0+\dots+0=0\)

所以 \(\sum\limits_{d|p_1^{k_1}}\mu(d)\sum\limits_{d|p_2^{k_2}}\mu(d)\dots\sum\limits_{d|p_n^{k_n}}\mu(d)=0·0·\dots·0=0\)

证毕

推论:

\(\sum\limits_{d|\text{gcd}(i,j)}\mu(d)=[\text{gcd}(i,j)=1]\)

证明显然

P2398 GCD SUM

题目链接

这道题是让我们求:

\(\sum\limits^n_{i=1}\sum\limits^n_{j=1}\gcd(i,j)\)

直接暴力计算,复杂度 \(O(n^2)\),显然是不可以的

考虑使用莫比乌斯反演,我们发现原式

根据欧拉 \(\varphi\) 函数的性质

\(\sum\limits_{d|n}\varphi(d)=n\)

\(=\sum\limits^n_{i=1}\sum\limits^n_{j=1}\sum\limits_{d|\gcd(i,j)}\varphi(d)\)

枚举 \(d\)

\(=\sum\limits^n_{d=1}\left\lfloor\dfrac{n}{d}\right\rfloor^2\varphi(d)\)

直到有一天我看见了一个大佬说可以用狄利克雷卷积做

然后想了两三天,终于会了

原式:

\(\sum\limits^n_{i=1}\sum\limits^n_{j=1}\gcd(i,j)\)

\(=\sum\limits^n_{d=1}\sum\limits^n_{i=1}\sum\limits^n_{j=1}[\gcd(i,j)=d]\)

\(=\sum\limits^n_{d=1}d\sum\limits^{\left\lfloor\frac{n}{d}\right\rfloor}_{i=1}\sum\limits^{\left\lfloor\frac{n}{d}\right\rfloor}_{j=1}[\gcd(i,j)=1]\)

\(=\sum\limits^n_{d=1}d\sum\limits^{\left\lfloor\frac{n}{d}\right\rfloor}_{i=1}\sum\limits^{\left\lfloor\frac{n}{d}\right\rfloor}_{j=1}\sum\limits_{r|\gcd(i,j)}\mu(r)\)

\(=\sum\limits^n_{d=1}d\sum\limits_{r=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(r)\left\lfloor\dfrac{n}{dr}\right\rfloor^2\)

对于 \(dr\) 我们发现它的取值为 \([1,n]\) 于是乎我们试着枚举,看看能不能化简

\(=\sum\limits^n_{dr=1}\left\lfloor\dfrac{n}{dr}\right\rfloor^2*X\)

此时 \(X\) 对应的是 \(dr\) 的每个取值后面的取整的那一坨出现的次数

\(=\sum\limits^n_{dr=1}\left\lfloor\dfrac{n}{dr}\right\rfloor^2\sum\limits_{k|dr}k\mu(\dfrac{dr}{k})\)

应用狄利克雷卷积

\(=\sum\limits^n_{dr=1}\left\lfloor\dfrac{n}{dr}\right\rfloor^2\varphi(dr)\)

此时我们不用管 \(d,r\) 的具体取值,而只关心他们的乘积

\(=\sum\limits^n_{k=1}\left\lfloor\dfrac{n}{k}\right\rfloor^2\varphi(k)\)

推荐阅读