数论题里经常出现一种结构:真正想求的是 g(n),但题目给的或者容易算的是”把 g 在所有因子上累加后的结果”:
f(n)=d∣n∑g(d)
怎么从 f 倒推回 g?莫比乌斯反演就是干这件事的。
狄利克雷卷积#
定义:
(f∗g)(n)=d∣n∑f(d)g(dn)
满足交换律、结合律、分配律。
三个基础函数:
- 元函数:ϵ(n)=[n=1]
- 常数函数:1(n)=1
- 恒等函数:id(n)=n
ϵ 是卷积单位元:f∗ϵ=f。
积性函数(gcd(a,b)=1⟹f(ab)=f(a)f(b))在此框架下很重要。欧拉函数和莫比乌斯函数都是积性函数。
三个核心卷积关系,记住它们就能认出大部分题目:
- μ∗1=ϵ,即 ∑d∣nμ(d)=[n=1]
- φ∗1=id,即 ∑d∣nφ(d)=n
- μ∗id=φ,即 ∑d∣nμ(d)dn=φ(n)
第三个可由前两个推出:μ∗id=μ∗(φ∗1)=(μ∗1)∗φ=ϵ∗φ=φ。
狄利克雷卷积与普通卷积(多项式乘法)本质是同一思路:普通卷积按”下标和”拆分,狄利克雷卷积按”因子”拆分。
莫比乌斯函数#
μ(n)=⎩⎨⎧10(−1)kn=1n 含平方因子n=p1p2⋯pk(k 个不同质数)
μ 之所以是反演的核心,是因为它满足:
d∣n∑μ(d)=[n=1]
翻成卷积:μ∗1=ϵ。也就是说,在卷积意义下,μ 是 1 的逆元。
莫比乌斯反演#
反演公式:
f(n)=d∣n∑g(d)⟺g(n)=d∣n∑μ(d)f(dn)
写成卷积就一目了然:f=g∗1,两边同卷 μ:
μ∗f=μ∗g∗1=g∗(μ∗1)=g∗ϵ=g
展开求和即得反演公式。
另一种等价形式(按倍数求和):
f(n)=n∣d∑g(d)⟺g(n)=n∣d∑μ(nd)f(d)
做题时,看到 ∑d∣n 或 ∑d∣gcd(i,j) 这类按因子/倍数展开的结构,通常可以用 μ∗1=ϵ 把求和拆开。反演本身往往不是终点,拆开后还要配合线性筛、积性函数前缀和、整除分块一起做。
- P2522 Problem b ↗:求 ∑i=xn∑j=ym[gcd(i,j)=k],经典反演 + 整除分块。
- P1829 Crash 的数字表格 ↗:求 ∑i=1n∑j=1mlcm(i,j),反演 + 前缀和优化。
- LCMSUM ↗:求 ∑i=1nlcm(i,n),利用 φ∗1=id 化简。
- LibreOJ 2185 ↗:求 ∑i=1n∑j=1md(ij),用到约数函数与反演的结合。