FXJ Wiki

Back

数论(III)Blur image

数论题里经常出现一种结构:真正想求的是 g(n)g(n),但题目给的或者容易算的是”把 gg 在所有因子上累加后的结果”:

f(n)=dng(d)f(n) = \sum_{d \mid n} g(d)

怎么从 ff 倒推回 gg?莫比乌斯反演就是干这件事的。

狄利克雷卷积#

定义:

(fg)(n)=dnf(d)g ⁣(nd)(f * g)(n) = \sum_{d \mid n} f(d) \, g\!\left(\frac{n}{d}\right)

满足交换律、结合律、分配律。

三个基础函数:

  • 元函数:ϵ(n)=[n=1]\epsilon(n) = [n = 1]
  • 常数函数:1(n)=11(n) = 1
  • 恒等函数:id(n)=n\operatorname{id}(n) = n

ϵ\epsilon 是卷积单位元:fϵ=ff * \epsilon = f

积性函数(gcd(a,b)=1    f(ab)=f(a)f(b)\gcd(a,b)=1 \implies f(ab) = f(a)f(b))在此框架下很重要。欧拉函数和莫比乌斯函数都是积性函数。

三个核心卷积关系,记住它们就能认出大部分题目:

  • μ1=ϵ\mu * 1 = \epsilon,即 dnμ(d)=[n=1]\sum_{d \mid n} \mu(d) = [n = 1]
  • φ1=id\varphi * 1 = \operatorname{id},即 dnφ(d)=n\sum_{d \mid n} \varphi(d) = n
  • μid=φ\mu * \operatorname{id} = \varphi,即 dnμ(d)nd=φ(n)\sum_{d \mid n} \mu(d) \frac{n}{d} = \varphi(n)

第三个可由前两个推出:μid=μ(φ1)=(μ1)φ=ϵφ=φ\mu * \operatorname{id} = \mu * (\varphi * 1) = (\mu * 1) * \varphi = \epsilon * \varphi = \varphi

狄利克雷卷积与普通卷积(多项式乘法)本质是同一思路:普通卷积按”下标和”拆分,狄利克雷卷积按”因子”拆分。

莫比乌斯函数#

μ(n)={1n=10n 含平方因子(1)kn=p1p2pkk 个不同质数)\mu(n) = \begin{cases} 1 & n = 1 \\ 0 & n \text{ 含平方因子} \\ (-1)^k & n = p_1 p_2 \cdots p_k \text{(} k \text{ 个不同质数)} \end{cases}

μ\mu 之所以是反演的核心,是因为它满足:

dnμ(d)=[n=1]\sum_{d \mid n} \mu(d) = [n = 1]

翻成卷积:μ1=ϵ\mu * 1 = \epsilon。也就是说,在卷积意义下,μ\mu11 的逆元。

莫比乌斯反演#

反演公式:

f(n)=dng(d)    g(n)=dnμ(d)f ⁣(nd)f(n) = \sum_{d \mid n} g(d) \;\Longleftrightarrow\; g(n) = \sum_{d \mid n} \mu(d) \, f\!\left(\frac{n}{d}\right)

写成卷积就一目了然:f=g1f = g * 1,两边同卷 μ\mu

μf=μg1=g(μ1)=gϵ=g\mu * f = \mu * g * 1 = g * (\mu * 1) = g * \epsilon = g

展开求和即得反演公式。

另一种等价形式(按倍数求和):

f(n)=ndg(d)    g(n)=ndμ ⁣(dn)f(d)f(n) = \sum_{n \mid d} g(d) \;\Longleftrightarrow\; g(n) = \sum_{n \mid d} \mu\!\left(\frac{d}{n}\right) f(d)

做题时,看到 dn\sum_{d \mid n}dgcd(i,j)\sum_{d \mid \gcd(i,j)} 这类按因子/倍数展开的结构,通常可以用 μ1=ϵ\mu * 1 = \epsilon 把求和拆开。反演本身往往不是终点,拆开后还要配合线性筛、积性函数前缀和、整除分块一起做。

练习#

  • P2522 Problem b:求 i=xnj=ym[gcd(i,j)=k]\sum_{i=x}^n \sum_{j=y}^m [\gcd(i,j) = k],经典反演 + 整除分块。
  • P1829 Crash 的数字表格:求 i=1nj=1mlcm(i,j)\sum_{i=1}^n \sum_{j=1}^m \operatorname{lcm}(i,j),反演 + 前缀和优化。
  • LCMSUM:求 i=1nlcm(i,n)\sum_{i=1}^n \operatorname{lcm}(i, n),利用 φ1=id\varphi * 1 = \operatorname{id} 化简。
  • LibreOJ 2185:求 i=1nj=1md(ij)\sum_{i=1}^n \sum_{j=1}^m d(ij),用到约数函数与反演的结合。
数论(III)
https://fxj.wiki/blog/algorithm-number-theory-3
Author 玛卡巴卡
Published at 2024年9月13日
Comment seems to stuck. Try to refresh?✨