莫比乌斯反演学习笔记

前置知识

狄利克雷卷积:\(f * g = \sum_{d|n}f(d)g(\frac{n}{d})\)

积性函数,线性筛。

数论分块。

单位函数:\(\varepsilon(n)=[n=1]\)。(积性函数)

常数函数:\(1(n)=1\)。(积性函数)

莫比乌斯函数

引理1: \(f(n)\) 是积性函数等价于 \(g(n)=\sum_{d|n}f(d)\) 是积性函数。

证明:

显然,\(g=f * 1\),所以 \(f(n)\) 是积性函数可以推出 \(g(n)\) 是积性函数。

\(g(n)\) 是积性函数,归纳法。

首先,\(g(1)=f(1)\),因为 \(g(1)=g(1)g(1)\),所以 \(f(1)=g(1)=1\)

假设对于所有小于 \(n\) 的值,\(f(n)\) 都是积性函数。

不妨设 \(n=ab,\gcd(a,b)=1\),则有:

\[\begin{aligned} g(n) &= g(ab)\\ &= \sum_{d|ab}f(d)\\ &= \sum_{d_1|a}\sum_{d_2|b}f(d_1d_2)\\ &= \sum_{d_1|a}\sum_{d_2|b}f(d_1)f(d_2)-f(a)f(b)+f(ab) \end{aligned} \]

又因为:

\[\begin{aligned} g(n) &= g(a)g(b)\\ &= \sum_{d_1|a}f(d_1)\sum_{d_2|b}f(d_2)\\ &= \sum_{d_1|a}\sum_{d_2|b}f(d_1)f(d_2) \end{aligned} \]

两式联立,得 \(-f(a)f(b)+f(ab)=0\),即 \(f(n)=f(ab)=f(a)f(b)\),得证。

定义: 满足 \(\sum_{d|n}\mu(d)=\varepsilon(n)\) 的函数 \(\mu\) 称作莫比乌斯函数。

性质1: 莫比乌斯函数是积性函数。

证明:

由于 \(\varepsilon(n)\) 是积性函数,根据引理1可知,\(\mu(n)\) 也是积性函数。

性质2: \(p\) 为质数,则:

\[\mu(p^k)= \begin{cases} 1&k=0\\ -1&k=1\\ 0&k>1 \end{cases} \]

说明:

代入定义的式子得到 \(\sum_{i=0}^k\mu(p^i)=\varepsilon(p^k)\),推一下就可以得到。

性质3:\(n\) 质因数分解后有 \(k\) 个不同的质因数,则:

\[\mu(n)= \begin{cases} 1&n=1\\ 0&n\text{有平方因子}\\ (-1)^k& \text{Otherwise.} \end{cases} \]

说明:

根据 \(\mu(p^k)\) 以及它是积性函数可得。

莫比乌斯反演

反演公式1:

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

反演公式2:

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

证明:

这里只证明公式 1。

考虑狄利克雷卷积。

首先,狄利克雷卷积满足交换律,结合律。

\(g = f * 1\),所以:

\[\begin{aligned} f(n)&=\sum_{d|n}\mu(\frac{n}{d})g(d)\\ &=\mu * g\\ &=\mu * (f * 1)\\ &=(\mu * 1) * f\\ &=\varepsilon * f\\ &=f \end{aligned} \]

得证。

证明2:

\[\begin{aligned} \sum_{d|n}\mu(\frac{n}{d})g(d) &= \sum_{d|n}\mu(\frac{n}{d})\sum_{d'|d}f(d')\\ &= \sum_{d|n}f(d)\sum_{d' = d j|n}\mu(\frac{n}{d'})\\ &= \sum_{d|n}f(d)\sum_{j|\frac{n}{d}}\mu(\frac{n}{dj})\\ &= \sum_{d|n}f(d)\sum_{j|\frac{n}{d}}\mu(j)\\ &= \sum_{d|n}f(d)\varepsilon(\frac{n}{d})\\ &= f(n) \end{aligned} \]

得证。

应用

题目1:\(\sum_{i=x}^n\sum_{j=y}^m[\gcd(i,j)=k]\)。(P2522 [HAOI2011] Problem bP3455 [POI2007] ZAP-Queries

思路:

只要求出 \(x=1,y=1\) 的情况就可以求出答案。

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k] &= \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]\\ &= \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\varepsilon(\gcd(i,j))\\ &= \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d|i,d|j}\mu(d)\\ &= \sum_{d \ge 1}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[d|\gcd(i,j)]\\ &= \sum_{d \ge 1}\mu(d)\lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor\\ \end{aligned} \]

预处理 \(\mu\) 的前缀和,数论分块即可。

关键在于将 \([n=1]\) 转化为 \(\sum_{d|n}\mu(d)\) 与交换求和顺序。

但是这其实只是利用了 \(\sum_{d|n}\mu(d)=[n=1]\) 这个结论,并没有真正的用反演公式。

其实用反演公式会非常显然。

\(f(k)\) 表示 \(\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\)\(f(d)\) 即是答案。

\(g(k)\) 表示 \(\sum_{i=1}^n\sum_{j=1}^m[k|\gcd(i,j)]\),显然有:

\[g(k)=\sum_{k|x}f(x) \]

我们也可以直接计算出 \(g(k)=\lfloor\frac{n}{k}\rfloor \lfloor\frac{m}{k}\rfloor\)

所以反演得到:

\[f(k) = \sum_{k | x}\mu(x)g(\frac{x}{k}) \]

也就是枚举所有 \(k\) 的倍数,和之前的式子其实是一样的。

相对而言,我们去找 \(f\)\(g\) 会比直接推式子简单一些。

题目2:\(\sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(i,j)\)\(1 \le n, m \le 10^7\)。(P1829 [国家集训队] Crash的数字表格 / JZPTAB

思路:

推式子。

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^m\operatorname{lcm}(i,j) &= \sum_{i=1}^n\sum_{j=1}^m\frac{ij}{\gcd(i,j)}\\ &= \sum_{k \ge 1} \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\frac{ij}{k}\\ &= \sum_{k \ge 1} \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]ijk\\ &= \sum_{k \ge 1} k \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]ij\\ \end{aligned} \]

\(f(N,M)=\sum_{i=1}^{N}\sum_{j=1}^{M}[\gcd(i,j)=1]ij\),则:

\[\begin{aligned} f(N,M) &=\sum_{i=1}^{N}\sum_{j=1}^{M}[\gcd(i,j)=1]ij\\ &=\sum_{i=1}^{N}\sum_{j=1}^{M}ij\sum_{d|i,d|j}\mu(d)\\ &=\sum_{d \ge 1}\mu(d)\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{M}{d}\rfloor}ijd^2\\ &=\sum_{d \ge 1}\mu(d)d^2\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{M}{d}\rfloor}ij\\ \end{aligned} \]

\(g(N,M)=\sum_{i=1}^{N}\sum_{j=1}^{M}ij\),显然 \(g(N,M)=\frac{NM(N+1)(M+1)}{4}\)

所以上式等于:

\[\sum_{d \ge 1}\mu(d)d^2 g(\lfloor\frac{N}{d}\rfloor, \lfloor\frac{M}{d}\rfloor) \]

\(h(n)=\mu(n)n^2\),显然是个积性函数,我们可以预处理它的前缀和,然后配合数论分块在 \(O(\sqrt N)\) 的时间内算出 \(f(N,M)\),最后的答案即为:

\[\sum_{k \ge 1} k f(\lfloor\frac{n}{k}\rfloor \lfloor\frac{m}{k}\rfloor) \]

再次数论分块,调用 \(f(N,M)\) \(\sqrt n\) 次,所以最终的复杂度是 \(O(n)\) 的。

同理,我们也可以用反演公式来推。

记:

\[f(k)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\frac{ij}{k}\]

\[g(k)=\sum_{k|d}f(d) \]

推一下 \(g(k)\)

\[\begin{aligned} g(k) &= \sum_{k|d}f(d)\\ &= \sum_{i=1}^n\sum_{j=1}^m[k|\gcd(i,j)]\frac{ij}{k}\\ &= \sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]ijk\\ &= k\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]ij \end{aligned} \]

然后就和上面的一样了。

题目3: 题意同上,多组询问,\(T \le 10^4,n,m \le 10^7\)。(BZOJ 2693)

思路:

很明显我们需要优化上题。

上题我们得到的式子:

\[f(N,M)=\sum_{d \ge 1}\mu(d)d^2 g(\lfloor\frac{N}{d}\rfloor, \lfloor\frac{M}{d}\rfloor) \]

答案即为:

\[\sum_{k = 1}^n k f(\lfloor\frac{n}{k}\rfloor \lfloor\frac{m}{k}\rfloor) \]

现在我们将 \(f\) 展开,代入答案得到:

\[\begin{aligned} \sum_{k = 1}^n k f(\lfloor\frac{n}{k}\rfloor \lfloor\frac{m}{k}\rfloor) &= \sum_{k = 1}^n k \sum_{d \ge 1}\mu(d)d^2g(\lfloor\frac{n}{dk}\rfloor \lfloor\frac{m}{dk}\rfloor)\\ \end{aligned} \]

关键转化:令 \(T = dk\),将枚举 \((d,k)\) 改为枚举 \((T,d)\)

上式变为:

\[\begin{aligned} \sum_{k = 1}^n k \sum_{d \ge 1}\mu(d)d^2g(\lfloor\frac{n}{dk}\rfloor \lfloor\frac{m}{dk}\rfloor) &= \sum_{T = 1}^n \sum_{d | T}\mu(d)d^2\frac{T}{d}g(\lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor)\\ &= \sum_{T = 1}^n g(\lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor)T\sum_{d | T}\mu(d)d\\ \end{aligned} \]

\(h(T) = T\sum_{d|n}\mu(d)d\),这个函数是个积性函数,可以 \(O(n)\) 预处理出来前缀和。而 \(g(N,M)\) 是可以 \(O(1)\) 计算的。所以单次询问可以直接数论分块,时间复杂度 \(O(T\sqrt{n})\)

转化非常关键!!!

题目4: 假设我们有一个集合 \(S \in \mathbb{Z_+}\),求:

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

思路:

这其实是一类问题:P2257 YY的GCD\(S\) 是质数集合),HDU5663 Hillan and the girl\(S\) 是平方数集合)。

其实都是一个方法。

我们先推式子:

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j) \in S] &= \sum_{d \in S}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j) =d]\\ &= \sum_{d \in S}\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d} \rfloor}[\gcd(i,j) =1]\\ &= \sum_{d \in S}\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d} \rfloor}\sum_{k|i,k|j}\mu(k)\\ &= \sum_{d \in S}\sum_{k \ge 1}\mu(k)\sum_{i=1}^{\lfloor \frac{n}{dk}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dk} \rfloor}1\\ &= \sum_{d \in S}\sum_{k \ge 1}\mu(k){\lfloor \frac{n}{dk}\rfloor}{\lfloor\frac{m}{dk} \rfloor}\\ \end{aligned} \]

然后,还是刚才的关键转化:\((d,k)\) 换成 \((d, T)\)

\[\begin{aligned} \sum_{d \in S}\sum_{k \ge 1}\mu(k){\lfloor \frac{n}{dk}\rfloor}{\lfloor\frac{m}{dk} \rfloor} &= \sum_{T=1}^n\sum_{d|T,d \in S}\mu(\frac{T}{d}){\lfloor \frac{n}{T}\rfloor}{\lfloor\frac{m}{T} \rfloor}\\ &= \sum_{T=1}^n{\lfloor \frac{n}{T}\rfloor}{\lfloor\frac{m}{T} \rfloor}\sum_{d|T,d \in S}\mu(\frac{T}{d})\\ \end{aligned} \]

记 $f(T) =\sum_{d|T,d \in S}\mu(\frac{T}{d}) $,显然可以预处理出来,时间复杂度低于 \(O(n \log \log n)\),然后数论分块即可单次 \(O(\sqrt{n})\) 时间解决。

题目5: 多组询问,求:

\[\sum_{i=1}^n\sum_{j=1}^m\sigma(\gcd(i,j))[\sigma(\gcd(i,j)) \le a] \]

P3312 [SDOI2014] 数表

思路:

同理,还是推式子,过程不写了,我们将原式化为:

\[\sum_{d=1}^n\sigma(d)[\sigma(d) \le a]\sum_{k \ge 1}\mu(k){\lfloor \frac{n}{dk}\rfloor}{\lfloor\frac{m}{dk} \rfloor} \]

然后还是将 \((d,k)\) 变为 \((T,k)\) 可以变为:

\[\sum_{T=1}^n{\lfloor \frac{n}{T}\rfloor}{\lfloor\frac{m}{T} \rfloor}\sum_{d|T}[\sigma(d) \le a]\sigma(d)\mu(\frac{T}{d}) \]

考虑到是多组询问,\(a\) 会变,我们将询问离线,按照 \(a\) 升序排序,然后依次将 \(\sigma(d)\) 从小到大加入贡献。

为了数论分块,我们要支持单点修改和区间查询,树状数组即可,时间复杂度 \(O(n \log \log n \log n)\)

题目6: 多组询问,求:

\[\sum_{i=1}^n\sum_{j=1}^md(ij) \]

\(d(n)\) 表示 \(n\) 的约数个数。(P3327 [SDOI2015] 约数个数和

思路:

首先,我们有一个关于 \(d(ij)\) 的公式:

\[d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x, y)=1] \]

posted @ 2024-01-20 13:42  rlc202204  阅读(15)  评论(0编辑  收藏  举报