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\))。
来自百度百科的证明:
- 当 \(n=1\) 时易证。
- 当 \(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]\) 这一公式,难在推柿子。它是数论中的重要部分,希望大家能熟练掌握。