Skip to content

狄利克雷卷积 ​

第一部分:狄利克雷卷积(Dirichlet Convolution) ​

它是数论函数空间上的二元运算,定义为: 对于两个数论函数f(n)和g(n),它们的卷积(f∗g)(n)为:

(f∗g)(n)=∑d|nf(d)⋅g(nd)

(其中d|n表示d取遍n的所有正因子。)

1. 三大核心性质 ​

  • 交换律:f∗g=g∗f
  • 结合律:(f∗g)∗h=f∗(g∗h)
  • 分配律:f∗(g+h)=f∗g+f∗h

2. 至关重要的“单位元”(恒等函数) ​

定义函数ϵ(n)(或写作e(n)):

ϵ(n)={1(n=1)0(n>1)

显然,对于任意函数f,都有:f∗ϵ=ϵ∗f=f。

3. 必须熟记的“四大基础积性函数”及其卷积关系 ​

  • 1(n):常函数,恒等于1。
  • Id(n):恒等函数,Id(n)=n。
  • φ(n):欧拉函数(1到n中与n互质的个数)。
  • μ(n):莫比乌斯函数(下面会细讲)。

极重要的恒等式(一定要背下):

1.φ∗1=Id 即:∑d|nφ(d)=n

2.μ∗1=ϵ 即:∑d|nμ(d)=[n=1]=e(这是莫比乌斯反演的根源)


第二部分:莫比乌斯函数(μ)与反演 ​

1. 莫比乌斯函数的定义 ​

若n=p1a1p2a2…pkak(质因数分解):

μ(n)={1(n=1)(−1)k(a1=a2=⋯=ak=1,即无平方因子数)0(存在某个 ai≥2,即含有平方因子)

2. 核心引理(反演的数学基础) ​

∑d|nμ(d)={1(n=1)0(n>1)

用卷积语言写就是:μ∗1=ϵ。
这意味着,μ 是常函数1在狄利克雷卷积下的逆元。


第三部分:莫比乌斯反演公式(两种形式) ​

形式一(约数形式,最常用) ​

如果数论函数F(n)和f(n)满足:

F(n)=∑d|nf(d)

即F=f∗1,那么:

f(n)=∑d|nμ(d)⋅F(nd)

即:f=F∗μ。

形式二(倍数形式,常用于求和变换) ​

如果:

F(n)=∑n|df(d)

(这里d是n的倍数,通常用在有限上界N中),那么:

f(n)=∑n|dμ(dn)⋅F(d)

快速记忆口诀 ​

已知“和函数”F求“原函数”f,就把F卷上μ,把除数换成商。


第四部分:经典应用案例(数论竞赛必会) ​

例题:求∑i=1n∑j=1n[gcd(i,j)=1](即n×n网格中互质点对数量)。

解法思路(利用反演把“等于1”换成“求和”):

  1. 利用性质[gcd(i,j)=1]=∑d|gcd(i,j)μ(d)。
  2. 交换求和次序:
∑i=1n∑j=1n∑d|i,d|jμ(d)=∑d=1nμ(d)⌊nd⌋2
  1. 配合整除分块(数论分块)即可在O(n)时间内算出。

第五部分:高级技巧 —— 杜教筛(快速求前缀和) ​

莫比乌斯反演结合狄利克雷卷积,可以构造出亚线性时间的数论函数前缀和算法(杜教筛)。

原理:设要求S(n)=∑i=1nf(i)。
若能找到另一个函数g,使得f∗g=h,且h的前缀和很好算,g的前缀和也很好算,则:

g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2ng(i)⋅S(⌊ni⌋)

利用这个递归式,可以快速求出S(n)。

例如:求∑i=1nμ(i)。
取f=μ,g=1,则h=μ∗1=ϵ。前缀和∑ϵ=1很好算,直接代入即可。


总结对照表(速查) ​

概念表达式备注
卷积定义(f∗g)(n)=∑d|nf(d)g(n/d)遍历因子
单位元ϵ(n)=[n=1]卷积中的“1”
莫比乌斯逆元μ∗1=ϵ最重要公式
欧拉恒等式φ∗1=Id推出φ=Id∗μ
反演(约数)F=f∗1⟺f=F∗μ互推灵魂
常见套路[gcd(i,j)=1]=∑d|gcd(i,j)μ(d)将条件转换成求和

如果你正在准备竞赛或刷题,这三个易错点请额外注意:

  1. 下标起始:卷积中的d是正因子,必须从 1 到n。
  2. 积性函数的卷积:两个积性函数的卷积仍是积性函数,利用这一点可以在线性筛(欧拉筛)中O(n)预处理μ,φ等函数。
  3. 边界条件:μ(1)=1,计算反演时千万不要把n=1的情况漏掉。

如果你需要,我可以手写推演一遍杜教筛的完整步骤,或者给你三道难度递增的卷积练习题。你告诉我接下来想看哪个?

欧拉函数φ ​

φ(n)=∑i=1n[gcd(i,n)=1]

方法一:组合计数法(最美妙的视角) ​

我们考虑 n个分数:

1n,2n,3n,⋯,nn

显然,这串分数一共有 n 个。

接下来,我们把这n个分数全部约分到最简形式。设约分后的分母为d,那么d一定是n的约数(因为分母是分子分母除以最大公约数得来的)。

关键来了:对于每一个固定的分母d∣n,有多少个分数约分后恰好等于?d(分子与d互质)呢?

  • 分母为d的最简真分数(或等于1的分数)形式为ad,其中必须满足gcd(a,d)=1。
  • 同时,因为原分数的分母是n,分子是从1到n,所以a的取值范围恰好是1≤a≤d。

而1到d中与d互质的整数个数,正是欧拉函数的定义:φ(d)。

总结计数:

  • 左边(按分母分类):∑d|nφ(d)
  • 右边(分数的总个数):n

因此:

∑d|nφ(d)=n

用卷积语言写,就是φ∗1=Id。


方法二:积性函数证明(最严谨的代数法) ​

如果你对“积性函数”敏感,这个证明极其干脆:

  1. 先证明F(n)=∑d|nφ(d)是积性函数。
    因为φ是积性函数,而“约数和”运算(即卷上1)保持积性,所以F(n)也是积性函数。

  2. 只需考察n的单一质因数幂pk的情况:

F(pk)=∑d|pkφ(d)=φ(1)+φ(p)+φ(p2)+⋯+φ(pk)

代入欧拉函数在质数幂处的取值(φ(pi)=pi−pi−1):

F(pk)=1+(p−1)+(p2−p)+(p3−p2)+⋯+(pk−pk−1)

这是一个望远镜求和(裂项相消),中间项全部抵消,只剩下:

F(pk)=pk
  1. 推广到一般n:
    若n=∏piki,由于积性:
F(n)=∏F(piki)=∏piki=n

证毕。


结合你刚学的莫比乌斯反演来反推验证 ​

既然你刚学了莫比乌斯反演,我们可以用这个恒等式反推出欧拉函数的另一个表达式。

由φ∗1=Id,两边同时卷上μ(因为1的逆是μ):

φ∗1∗μ=Id∗μ

左边:φ∗(1∗μ)=φ∗ϵ=φ 右边:Id∗μ

于是得到著名的欧拉反演公式:

φ(n)=∑d|nμ(d)⋅nd=n∑d|nμ(d)d

(例如:φ(6)=6×(1−12−13+16)=2,完全正确。)


记忆小窍门(几何直观) ​

你可以把这个等式想象成:把n个格子按“周期”分组。分母d是n的周期,φ(d)是在该周期下“新出现”的不可约位置,所有周期的不可约位置加起来,正好铺满n个整数点。这就是为什么∑d|nφ(d)=n。

如果你对这个“分数约分”的证明还有疑问,或者想看我把它用在具体的竞赛题(比如求∑i=1ngcd(i,n))中,随时告诉我!

针对你这个二维求和 ∑i=1m∑j=1n[gcd(i,j)=1],直接套用莫比乌斯反演的核心套路,可以一步写出化简公式。

这个式子的几何意义是:在 m×n 的矩形网格点阵中,从原点 (0,0) 出发能直接“看到”(即视线不被遮挡)的整点个数。


1. 反演化简(标准推导) ​

利用我们刚学的恒等式:[gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)。

代入原式并交换求和次序(d 必须同时整除 i 和 j):

∑i=1m∑j=1n[gcd(i,j)=1]=∑i=1m∑j=1n∑d∣i, d∣jμ(d)=∑d=1min(m,n)μ(d)∑i=1,d∣im∑j=1,d∣jn1

在 1 到 m 中,能被 d 整除的数的个数为 ⌊md⌋,同理 j 有 ⌊nd⌋ 个。

最终公式:

∑i=1m∑j=1n[gcd(i,j)=1]=∑d=1min(m,n)μ(d)⌊md⌋⌊nd⌋

2. 特殊情况:当 m=n(正方形网格) ​

如果 m=n=N,公式退化为:

∑d=1Nμ(d)⌊Nd⌋2

这个结果还有一个极其优美的欧拉函数等价形式(利用我们刚证的 ∑d|kφ(d)=k):

∑i=1N∑j=1N[gcd(i,j)=1]=1+2∑i=1Nφ(i)

(其中的 +1 是因为坐标 (1,1) 在对角线交点处被重复计算,或者理解为只算一次原点视线)。


3. 如何快速计算?(数论分块 / 整除分块) ​

如果你需要编程计算(比如 m,n≤1012),不能直接枚举 d,必须使用整除分块。

核心观察:随着 d 增大,⌊md⌋ 和 ⌊nd⌋ 都会分段保持不变。我们可以将 d 分成若干个区间 [l,r],在同一个区间内这两个值不变。

计算步骤:

  1. 预处理莫比乌斯函数的前缀和 M(x)=∑i=1xμ(i)(用线性筛)。
  2. 设 N=min(m,n)。
  3. 令 l=1,当 l≤N 时:
    • 计算当前块的值:vm=⌊m/l⌋,vn=⌊n/l⌋
    • 计算块的右端点:r=min(⌊mvm⌋, ⌊nvn⌋, N)
    • 这个区间 [l,r] 的贡献为:(M(r)−M(l−1))×vm×vn
    • 令 l=r+1 继续下一块。

复杂度:O(m+n),极快。


4. 举个具体例子(手算验证) ​

求 m=4,n=6 时的值。

先列 μ(d):μ(1)=1,μ(2)=−1,μ(3)=−1,μ(4)=0。
代入公式:

d=1: 1×4×6=24d=2: (−1)×2×3=−6d=3: (−1)×1×2=−2d=4: 0×1×1=0

总和:24−6−2=16。

意义:在 4×6 的网格中,有 16 个点与原点连线不经过其他格点。


5. 与狄利克雷卷积的深层联系(拔高) ​

如果你把这个问题看成矩阵 Ai,j=[gcd(i,j)=1],那么这个二维求和本质上是在对积性函数的二维前缀和做处理。

我们可以用狄利克雷卷积的语言重新包装: 设 F(n,m)=∑i=1m∑j=1n[gcd(i,j)=1]。 其实这就是把恒等函数 1 在二维格点上的卷积逆(即 μ)做了个加权平均。这为以后学习多维莫比乌斯反演(如 gcd 矩阵的行列式)打下了基础。


如果你需要,我可以直接给你一份C++ 整除分块的完整可运行代码,或者继续推导 三维情况 ∑i=1a∑j=1b∑k=1c[gcd(i,j,k)=1] 的公式(套路完全一样,只是多乘一个下取整)。你告诉我下一步想看哪个?

数论分块/整除分块 ​

TODO

FWT & 高位前缀和 ​

TODO