【学习笔记】莫比乌斯反演

Part 1 前置芝士

1.1 数论函数

数论函数:对于函数 \(f\),若满足定义域为正整数,则称这个函数为 数论函数

加性函数:对于函数 \(f\) 若满足 \(\gcd(p,q)=1(p,q \in \mathbb N^+)\) 时 \(f(pq)=f(p)+f(q)\),则称函数 \(f\) 为 加性函数。

积性函数:对于函数 \(f\) 若满足 \(\gcd(p,q)=1(p,q \in \mathbb N^+)\) 时 \(f(pq)=f(p)f(q)\),则称函数 \(f\) 为 积性函数

若将值域扩大到任意 \(p,q(p,q \in \mathbb N^+)\),仍然成立,则称为 完全加性(或积性)函数

加性函数与积性函数均属于数论函数。

tip:\(\gcd(p,q)=1\) 指 \(p,q\) 互质。

1.2 莫比乌斯函数

根据 贝尔级数 可得:

\[\begin{array}{c} \mu(p^k)=\begin{cases}1&k=0\\-1&k=1\\0&k>1\end{cases} \\ \therefore \mu(n)=\begin{cases}1&n=1\\(-1)^k&n=p_1p_2...p_k,p_i \ 为 \ n \ 的质因子且两两互质\\0&\text{otherwise}\end{cases} \end{array} \]

tip:\(\text{otherwise}\) 指不满足上述条件。

1.3 莫比乌斯函数性质

性质 1

我们注意到,莫比乌斯函数有一个 重要性质

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

tip:\(d|n\) 表示能被 \(n\) 整除的 \(d\)。\([n=1]\) 指 \(n=1\) 则值为 \(1\),否则为 \(0\)。

(口糊一下:对于所有能被 \(n\) 整除的数,它们所有的莫比乌斯函数和,当 \(n\) 等于 \(1\) 时为 \(1\),否则为 \(0\))。

来自百度百科的证明

  1. 当 \(n=1\) 时易证。
  2. 当 \(n \ne 0\) 时,不妨令 \(n=p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k}\)。易证:在 \(n\) 的所有因子中,莫比乌斯值不为 \(0\) 的只有质因子次数为 \(1\) 的因子,而质因子次数为 \(a\) 的因子有 \(C_k^r\) 个。\(\therefore \sum\limits_{d|n} \mu(n)=C_k^0 - C_k^1 + C_k^2 +...+ (-1)^k C_k^k=\sum\limits_{i=0}^k(-1)^i C_k^i\)

性质 2 ?

就需要用到莫比乌斯反演了。

Part 2 莫比乌斯反演

2.1 芝士:欧拉函数

直接看:

\[\varphi(n)=\sum_{i=1}^{n}[(n,i)=1] \]

可能没看懂,口糊一下,求所有不大于 \(n\) 与 \(n\) 互质的数。

那这有什么用?

再看一个重要性质:

\[\sum_{d|n}\varphi(n)=n \]

再口糊一下,所有能被 \(n\) 整除的数的欧拉函数和为 \(n\)。

来自 OI wiki 的证明

如果 \(\gcd(k,n)=d\),那么 \(\gcd(\frac{k}{d},\frac{n}{d})=1,(k<n)\)。

不妨设 \(f(x)\) 表示 \(\gcd{k,n}=x\) 的数的个数,那么 \(n=\sum\limits_{i=1}^{n}f(i)\)。

根据上面证明,我们注意到,\(f(x)=\varphi(\frac{n}{x})\),从而 \(n=\sum\limits_{d|n}\varphi(\frac{n}{d})\)。再次注意到,约数 \(d\) 和 \(\frac{n}{d}\) 具有对称性,\(\therefore n=\sum\limits_{d|n} \varphi (d)\)。

2.2 莫比乌斯反演及其证明

有了欧拉函数的铺垫,接下来就简单了。

还是经典直接上公式:

\[g(n)=\sum_{d|n} f(d)\Longleftrightarrow f(n)=\sum_{d|n}g(d)\mu \left (\frac{n}{d} \right) \]

啊!!!完全看不懂怎么办。\(g\) 和 \(f\) 是什么呀?

别慌,\(g\) 和 \(f\) 只是两个数论函数,并没有定义什么。其实只是如果 \(g(n)=\sum\limits_{d|n} f(d)\) 或 \(f(n)=\sum\limits_{d|n}g(d)\mu \left (\frac{n}{d} \right)\) 中的一个条件满足,那么另一个条件也满足。
不过做题目时基本用不上。

它在做题目中最经典得运用就是这个,在下面例题中也经常用到:

\[\sum_{p|\gcd(i,j)}\mu(p)=[\gcd(i,j)=1] \]

接下来要正确性证明了,这里采用喜闻乐见的推柿子大法:

\[g(n)=\sum_{d|n}g(d)\mu \left (\frac{n}{d} \right)=\sum_{d|n,t|\frac{n}{d}}g(t)\mu\left(\frac{n}{d}\right)=\sum_{t|n}g(t)\sum_{d|\frac{n}{d}}\mu(d)=g(n) \]

2.3 性质 2

现在就知道了,\(\sum\limits_{d|n}\frac{\mu (d)}{d} = \frac{\varphi (n)}{n}\),证明也十分简单。

令 \(F(n)=n\),\(f(n)=\varphi(n)\),直接代入莫比乌斯反演即可。

2.4 莫比乌斯反演经典例题

Ex.1 LuoguP3455 ZAP-Queries

题意简述

对 \(T\) 组询问求 \(\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=d]\)。

数据范围:\(1\le d \le a,b \le 5\times10^4\),\(T\le 5\times 10^4\)。

解题思路

不妨令 \(a\le b\)。约去 \(d\) 得:

\[\sum_{i=1}^{\lfloor \frac{a}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{b}{d} \rfloor}[\gcd(i,j)=1] \]

注意到,\(\sum\limits_{p|n}\mu(n)=[n=1]\) 可以变为 \(\sum\limits_{p|\gcd(i,j)}\mu(p)=[\gcd(i,j)=1]\),代入进去,得:

\[\sum_{i=1}^{\lfloor \frac{a}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{b}{d} \rfloor}\sum_{p|\gcd(i,j)}\mu{(p)} \]

枚举 \(p\),\(\because p|\gcd(i,j)\),\(\therefore p\) 为 \(i,j\) 的因数:

\[\therefore 原式=\sum_{p=1}^{\lfloor \frac {a}{d} \rfloor}\mu{(p)} \times {\lfloor \frac{a}{dp} \rfloor}\times{\lfloor \frac{b}{dp} \rfloor} \]

整除分块(数论分块)求解即可。

Ex.2 LuoguP2257 YY的GCD

题意简述

对 \(T\) 组询问求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j) \in prime]\)。

数据范围:\(T=10^4,N,M\le10^7\)。

解题思路

我们不妨令 \(n\le m\),\(k\) 为质数,则 \(k\le n\)

推一下柿子:

\[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j) \in prime]=\sum_{k=1}^{n}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k](k\in prime) \]

太史了,同时约去 \(k\) 一下,得:

\[\sum_{k=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k} \rfloor}[\gcd(i,j)=1](k\in prime) \]

注意到,\(\sum\limits_{d|n}\mu(d)=[n=1]\) 可以变为 \(\sum\limits_{d|\gcd(i,j)}\mu(d)=[\gcd(i,j)=1]\),代入进去,得:

\[\sum_{k=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor \frac{m}{k} \rfloor}\sum_{d|\gcd(i,j)}\mu(d)(k\in prime) \]

枚举 \(d\),\(\because d|\gcd(i,j)\),\(\therefore d\) 为 \(i,j\) 的因数:

\[\therefore 原式=\sum_{k=1}^n\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\times\lfloor\frac{n}{kd}\rfloor\times\lfloor\frac{m}{kd}\rfloor(k \in prime) \]

这下是不是好多了,但是,别急,不妨设 \(T=kd\),则

\[原式=\sum_{k=1}^n\sum_{d=1}^{\lfloor \frac{n}{k}\rfloor}\mu(d)\times \lfloor \frac{n}{T}\rfloor\times \lfloor \frac{m}{T}\rfloor (k \in prime)\]

枚举 \(T\),得:

\[\sum_{T=1}^n\lfloor \frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor \sum_{k|T,k \in prime} \mu \left( \frac{T}{k} \right) \]

预处理 \(k\),整除分块即可做出。

Ex.3 LuoguP3327 约数个数和

题意简述

设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(T\) 组数据 \(n,m\),求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\)。

数据范围:\(1\le T,n,m \le 50000\)。

解题思路

不难发现

\[\begin{matrix} d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[\gcd(x,y)=1] \\ \therefore \sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{x|i}\sum\limits_{y|j}[\gcd(x,y)=1] \end{matrix} \]

枚举 \(i\) 和 \(j\),不如直接枚举 \(x\) 和 \(y\),可得:

\[\sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m} \lfloor \frac{n}{x}\rfloor \lfloor \frac{m}{y} \rfloor [\gcd(x,y)=1] \]

同样的道理:

\[ \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m} \lfloor \frac{n}{x}\rfloor \lfloor \frac{m}{y} \rfloor \sum\limits_{d|\gcd(x,y)}\mu(d) \]

令 \(n \le m\),得:

\[\sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m} \lfloor \frac{n}{x}\rfloor \lfloor \frac{m}{y} \rfloor \sum\limits_{d=1}^n\mu(d)\times[d|\gcd(x,y)] \]

约去 \(d\),得:

\[\sum\limits_{x=1}^{\lfloor \frac{n}{d} \rfloor}\sum\limits_{y=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{n}{dx}\rfloor \lfloor \frac{m}{dy} \rfloor \sum\limits_{d=1}^n\mu(d) \]

再移项变好看一点,得:

\[\sum\limits_{d=1}^n\mu(d) \left(\sum\limits_{x=1}^{\lfloor \frac{n}{d} \rfloor}\lfloor \frac{n}{dx}\rfloor\right)\left(\sum\limits_{y=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{m}{dy} \rfloor \right) \]

整除分块即可。

Ex.4 LuoguP1829 Crash的数字表格

题意简述

求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m\operatorname{lcm}(i,j)\) 对 \(20101009\) 取模的值。

\(\operatorname{lcm}(i,j)\) 指 \(i\) 和 \(j\) 的最小公倍数。

数据范围: \(n,m\le 10^7\) (对 \(20101009\) 取模)

解题思路

令 \(n\le m\),不难发现:

\[\sum\limits_{i=1}^n\sum\limits_{j=1}^m\operatorname{lcm}(i,j)=\sum_{i=1}^n\sum_{j=1}^m\frac{i\cdot j}{\gcd(i,j)}=\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^m \frac{i\times j}{d} [\gcd(i,j)=d] \]

约去 \(d\),得:

\[\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} {i\times j\times d}[\gcd(i,j)=1] \]

还是同样的道理:

\[原式=\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} {i\times j\times d}\sum\limits_{k|\gcd(i,j)}\mu(k) \]

拆开来,再移项,得:

\[\sum\limits_{d=1}^nd\sum\limits_{k=1}^n\mu(k)\sum\limits_{i=1}^{\lfloor \frac{n}{d} \rfloor}i[\gcd(k,i)=1]\sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor}j[\gcd(k,j)=1] \]

约去 \(k\) 得:

\[\sum\limits_{d=1}^nd\sum\limits_{k=1}^n\mu(k)\sum\limits_{i=1}^{\lfloor \frac{n}{dk} \rfloor}ik\sum\limits_{j=1}^{\lfloor \frac{m}{dk} \rfloor}jk \]

太丑了,化简一下:

\[\sum\limits_{d=1}^nd\sum\limits_{k=1}^nk^2\mu(k)\sum\limits_{i=1}^{\lfloor \frac{n}{dk} \rfloor}i\sum\limits_{j=1}^{\lfloor \frac{m}{dk} \rfloor}j \]

根据等差数列求和公式:\(S=\frac{(a_1+a_n)\times n}{2}\)。再进行进一步拆开,得:

\[\begin{align} &\sum\limits_{d=1}^nd\sum\limits_{k=1}^nk^2\mu(k)\times \frac{\lfloor \frac{n}{dk} \rfloor(\lfloor \frac{n}{dk} \rfloor + 1)}{2}\times \frac{\lfloor \frac{m}{dk} \rfloor(\lfloor \frac{m}{dk} \rfloor + 1)}{2} \\ =&\sum\limits_{d=1}^nd\sum\limits_{k=1}^nk^2\mu(k)\times \frac{\lfloor \frac{n}{dk} \rfloor \lfloor \frac{m}{dk} \rfloor (\lfloor \frac{n}{dk} \rfloor + 1) (\lfloor \frac{m}{dk} \rfloor + 1)}{4} \end{align} \]

其实这样已经可以在洛谷 卡过了。但是,显然这 \(O(n^2)\) 解法还是不够优秀。

来,设 \(x=dk\),所以:

\[\begin{align} 原式&=\sum\limits_{x=1}^nx\sum\limits_{k|x}k\mu(k)\times \frac{\lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{x} \rfloor (\lfloor \frac{n}{x} \rfloor + 1) (\lfloor \frac{m}{x} \rfloor + 1)}{4} \end{align} \]

令 \(g(x)=\sum\limits_{d|x}xd \times \mu(d)\),注意到,函数 \(g\) 是一个积性函数。

\[\begin{align} \therefore g\left(\prod P_i^{a_i}\right)&=\prod g\left(P_i^{a_{i}}\right) \\ &=\prod\left(T\times P_{i^0}\times \mu(1) +T\times P_{i}\times\mu\left(P_i\right) \right) \\ &=\prod\left(T\times (1-P_{i})\right) \\ \end{align} \]

\[\begin{align} \therefore &g(p)=1-p \\ &g(p^k)=g(p^{k-1}) \\ \therefore &g(np)=g(n)\times g(p),\left(\gcd(n,p)=1\right) \end{align} \]

筛一下,就出来了

Part 3 总结

这篇是本蒟蒻第一篇算法专栏,结合了 OI Wiki,百度百科与许多题解。其中特意没有写 狄利克雷卷积,意在更容易理解,有兴趣可以阅读。若有错误,欢迎指出。

莫比乌斯反演其实很简单,大部分只需用 \(\sum\limits_{p|\gcd(i,j)}\mu(p)=[\gcd(i,j)=1]\) 这一公式,难在推柿子。它是数论中的重要部分,希望大家能熟练掌握。