莫比乌斯反演学习笔记

Fri Jul 04 2025
7 label.readTime
1303 label.wordCount

式子推推推推到厌倦。。。

约定 Link to 约定

本文里的数论函数 f(n)f(n) 定义域均为自然数集,值域为整数集。

引入 Link to 引入

莫比乌斯反演(以下简称莫反)通常用来解决形如 ∑i=1n∑j=1m[gcd⁡(i,j)=1]\sum_{i = 1}^{n}\sum_{j = 1}^{m}[\gcd(i,j) = 1] 的问题。

前置知识 Link to 前置知识

  • 数论分块

一些基本函数 Link to 一些基本函数

  • I(n)=1I(n) = 1
  • Id(n)=nId(n) = n
  • ϵ(n)=[n=1]\epsilon(n) = [n = 1]
  • φ(n)=∑i=1n[gcd⁡(i,n)=1]\varphi(n) = \sum_{i = 1}^{n}[\gcd(i,n) = 1]

狄利克雷卷积 Link to 狄利克雷卷积

由于莫反和狄利克雷卷积关系并不怎么紧密,所以这里就只讲一下定义和一些基本性质。

定义 Link to 定义

(f∗g)(n)=∑d∣nf(d)g(nd)(f * g)(n) = \sum_{d \mid n}f(d)g(\frac{n}{d})

其中 ∗* 就表示狄利克雷卷积,(n)(n) 表示范围,通常省略。

性质 Link to 性质

  • 交换律:f∗g=g∗ff * g = g * f
  • 结合律:(f∗g)∗h=f∗(g∗h)(f * g) * h = f * (g * h)
  • 分配律:f∗(g+h)=f∗g+g∗hf * (g + h) = f * g + g * h(++ 就是普通加法)

和乘法很像哈

正文 Link to 正文

莫比乌斯反演和 μ\mu 函数(莫比乌斯函数)紧密相关。

μ\mu 函数 Link to \mu 函数

定义 Link to 定义

μ(n)={1n=1(−1)质因子数量n 不含有平方数因子0otherwise.\mu(n) = \begin{cases} 1 & n = 1 \\ (-1)^\text{质因子数量} & n \text{ 不含有平方数因子} \\ 0 & \text{otherwise.} \end{cases}

性质 Link to 性质

  • μ\mu 是个积性函数,在 gcd⁡(a,b)=1\gcd(a,b) = 1 时有 μ(ab)=μ(a)μ(b)\mu(ab) = \mu(a)\mu(b),这意味着我们可以用欧拉筛在线性复杂度内求出它。证明很简单。
  • 核心出装:∑d∣nμ(d)=[n=1]\sum_{d \mid n}\mu(d) = [n = 1],这个结论非常常用。

证明:
我们可以把 nn 分解成 ∏i=1kpici\prod_{i = 1}^{k}p_i^{c_i},设 n′=∏i=1kpin' = \prod_{i = 1}^{k}p_i,那么有 ∑d∣nμ(n)=∑d∣n′μ(n)=∑i=1k(ki)⋅(−1)i\sum_{d \mid n}\mu(n) = \sum_{d \mid n'}\mu(n) = \sum_{i = 1}^{k}\binom{k}{i} \cdot (-1)^i,根据二项式定理,∑i=1k(ki)⋅(−1)i=[k=0]\sum_{i = 1}^{k}\binom{k}{i} \cdot (-1)^i = [k = 0],所以只有在 k=0k = 0(即 n=1n = 1)时原式为 11,其余时候都为 00。

这下子我们同时证明了 (μ∗I)(n)=ϵ(n)(\mu * I)(n) = \epsilon(n),而 ϵ\epsilon 是狄利克雷卷积的单位元,所以 μ\mu 也可以定义为 II 函数的逆元,也就是 μ=I−1\mu = I^{-1}。

现在你已经学会了莫比乌斯反演了

例题 Link to 例题

ZAP-Queries Link to

我们钦定 a≤ba \le b,先推式子:

ans=∑i=1a∑j=1b[gcd⁡(i,j)=d]=∑i=1a∑j=1b[d∣i][d∣j][gcd⁡(id,jd)=1]=∑i=1⌊ad⌋∑j=1⌊bd⌋[gcd⁡(i,j)=1]\begin{aligned} ans & = \sum_{i = 1}^{a}\sum_{j = 1}^{b}[\gcd(i,j) = d] \\ & = \sum_{i = 1}^{a}\sum_{j = 1}^{b}[d \mid i][d \mid j][\gcd(\frac{i}{d},\frac{j}{d}) = 1] \\ & = \sum_{i = 1}^{\lfloor \frac{a}{d} \rfloor}\sum_{j = 1}^{\lfloor \frac{b}{d} \rfloor}[\gcd(i,j) = 1] \end{aligned}

(警觉起来)

我们发现出现了这么一个式子:[gcd⁡(i,j)=1][\gcd(i,j) = 1],结合 ∑d∣nμ(d)=[n=1]\sum_{d \mid n}\mu(d) = [n = 1],把 gcd⁡(i,j)=1\gcd(i,j) = 1 当做 nn:

ans=∑i=1⌊ad⌋∑j=1⌊bd⌋∑g∣gcd⁡(i,j)μ(g)=∑g=1⌊ad⌋μ(g)∑i=1⌊ad⌋∑j=1⌊bd⌋[g∣i][g∣j]=∑g=1⌊ad⌋μ(g)∑i=1⌊agd⌋∑j=1⌊bgd⌋1=∑g=1nμ(g)⌊agd⌋⌊bgd⌋\begin{aligned} ans & = \sum_{i = 1}^{\lfloor \frac{a}{d} \rfloor}\sum_{j = 1}^{\lfloor \frac{b}{d} \rfloor}\sum_{g \mid \gcd(i,j)}\mu(g) \\ & = \sum_{g = 1}^{\lfloor \frac{a}{d} \rfloor}\mu(g)\sum_{i = 1}^{\lfloor \frac{a}{d} \rfloor}\sum_{j = 1}^{\lfloor \frac{b}{d} \rfloor}[g \mid i][g \mid j] \\ & = \sum_{g = 1}^{\lfloor \frac{a}{d} \rfloor}\mu(g)\sum_{i = 1}^{\lfloor \frac{a}{gd} \rfloor}\sum_{j = 1}^{\lfloor \frac{b}{gd} \rfloor}1 \\ & = \sum_{g = 1}^{n}\mu(g)\lfloor \frac{a}{gd} \rfloor \lfloor \frac{b}{gd} \rfloor \end{aligned}

化成这样我们就可以愉快的数论分块了,复杂度 O(a+na)O(a + n\sqrt{a})。其中 nn 来自预处理,n\sqrt{n} 来自数论分块的查询。

Crash 的数字表格 / JZPTAB Link to

钦定 n≤mn \le m,依然是推式子:

ans=∑i=1n∑j=1mlcm⁡(i,j)=∑i=1n∑j=1mijgcd⁡(i,j)=∑d=1n∑i=1n∑j=1mijd[gcd⁡(i,j)=d]=∑d=1n∑i=1n∑j=1mijd[d∣i][d∣j][gcd⁡(id,jd)=1]=∑d=1n∑i=1⌊nd⌋∑j=1⌊md⌋id⋅jdd[gcd⁡(i,j)=1]=∑d=1n∑i=1⌊nd⌋∑j=1⌊md⌋ijd∑g∣gcd⁡(i,j)μ(g)=∑d=1nd∑i=1⌊nd⌋∑j=1⌊md⌋ij∑g∣gcd⁡(i,j)μ(g)=∑d=1nd∑g=1⌊nd⌋μ(g)∑i=1⌊ngd⌋∑j=1⌊mgd⌋ij⋅g2=∑d=1nd∑g=1⌊nd⌋g2μ(g)∑i=1⌊ngd⌋i∑j=1⌊mgd⌋j\begin{aligned} ans & = \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_{d = 1}^{n}\sum_{i = 1}^{n}\sum_{j = 1}^{m}\frac{ij}{d}[\gcd(i,j) = d] \\ & = \sum_{d = 1}^{n}\sum_{i = 1}^{n}\sum_{j = 1}^{m}\frac{ij}{d}[d \mid i][d \mid j][\gcd(\frac{i}{d},\frac{j}{d}) = 1] \\ & = \sum_{d = 1}^{n}\sum_{i = 1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j = 1}^{\lfloor \frac{m}{d} \rfloor}\frac{id \cdot jd}{d}[\gcd(i,j) = 1] \\ & = \sum_{d = 1}^{n}\sum_{i = 1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j = 1}^{\lfloor \frac{m}{d} \rfloor}ijd\sum_{g \mid \gcd(i,j)}\mu(g) \\ & = \sum_{d = 1}^{n}d\sum_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j = 1}^{\lfloor \frac{m}{d} \rfloor}ij\sum_{g \mid \gcd(i,j)}\mu(g) \\ & = \sum_{d = 1}^{n}d\sum_{g = 1}^{\lfloor \frac{n}{d} \rfloor}\mu(g)\sum_{i = 1}^{\lfloor \frac{n}{gd} \rfloor}\sum_{j = 1}^{\lfloor \frac{m}{gd} \rfloor}ij \cdot g^2 \\ & = \sum_{d = 1}^{n}d\sum_{g = 1}^{\lfloor \frac{n}{d} \rfloor}g^2 \mu(g)\sum_{i = 1}^{\lfloor \frac{n}{gd} \rfloor}i\sum_{j = 1}^{\lfloor \frac{m}{gd} \rfloor}j \end{aligned}

我们发现 ∑i=1⌊ngd⌋i\sum_{i = 1}^{\lfloor \frac{n}{gd} \rfloor}i 和 ∑j=1⌊mgd⌋j\sum_{j = 1}^{\lfloor \frac{m}{gd} \rfloor}j 就是一个等差数列求和,可以 O(1)O(1) 求,而 ∑g=1⌊nd⌋g2μ(g)\sum_{g = 1}^{\lfloor \frac{n}{d} \rfloor}g^2 \mu(g) 可以在线性筛的时候预处理,接下来就是愉快的数论分块时间了。

总结 Link to 总结

其实看上面两个题,你应该已经知道大概了流程了:先把枚举 gcd⁡\gcd,然后就会出现 [gcd⁡(i,j)=1][\gcd(i,j) = 1],直接套上核心出装,然后来一个数论分块,这道题就做完了。

你可以通过下面的好题推荐来强化。

好题推荐 Link to 好题推荐