莫比乌斯反演学习笔记

Fri Jul 04 2025
7 分钟

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

约定 Link to 约定

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

引入 Link to 引入

莫比乌斯反演(以下简称莫反)通常用来解决形如 i=1nj=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 定义

(fg)(n)=dnf(d)g(nd)(f * g)(n) = \sum_{d \mid n}f(d)g(\frac{n}{d})

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

性质 Link to 性质

  • 交换律:fg=gff * g = g * f
  • 结合律:(fg)h=f(gh)(f * g) * h = f * (g * h)
  • 分配律:f(g+h)=fg+ghf * (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),这意味着我们可以用欧拉筛在线性复杂度内求出它。证明很简单。
  • 核心出装dnμ(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,那么有 dnμ(n)=dnμ(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 函数的逆元,也就是 μ=I1\mu = I^{-1}

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

例题 Link to 例题

ZAP-Queries Link to

我们钦定 aba \le b,先推式子:

ans=i=1aj=1b[gcd(i,j)=d]=i=1aj=1b[di][dj][gcd(id,jd)=1]=i=1adj=1bd[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],结合 dnμ(d)=[n=1]\sum_{d \mid n}\mu(d) = [n = 1],把 gcd(i,j)=1\gcd(i,j) = 1 当做 nn

ans=i=1adj=1bdggcd(i,j)μ(g)=g=1adμ(g)i=1adj=1bd[gi][gj]=g=1adμ(g)i=1agdj=1bgd1=g=1nμ(g)agdbgd\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

钦定 nmn \le m,依然是推式子:

ans=i=1nj=1mlcm(i,j)=i=1nj=1mijgcd(i,j)=d=1ni=1nj=1mijd[gcd(i,j)=d]=d=1ni=1nj=1mijd[di][dj][gcd(id,jd)=1]=d=1ni=1ndj=1mdidjdd[gcd(i,j)=1]=d=1ni=1ndj=1mdijdggcd(i,j)μ(g)=d=1ndi=1ndj=1mdijggcd(i,j)μ(g)=d=1ndg=1ndμ(g)i=1ngdj=1mgdijg2=d=1ndg=1ndg2μ(g)i=1ngdij=1mgdj\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=1ngdi\sum_{i = 1}^{\lfloor \frac{n}{gd} \rfloor}ij=1mgdj\sum_{j = 1}^{\lfloor \frac{m}{gd} \rfloor}j 就是一个等差数列求和,可以 O(1)O(1) 求,而 g=1ndg2μ(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 好题推荐