反演
引入
如果我们已知 f ( n ) = ∑ i = 1 n g ( i ) f(n)=\sum_{i=1}^ng(i) f(n)=∑i=1ng(i),那么我们如何用 g g g 函数表示出 f f f 函数呢?
反演是什么
若已知一个集合 A A A 到另一个集合 B B B 的一种映射方式 f f f,那么我们称找到另一种从集合 B B B 到集合 A A A 的映射方式 g g g 这个过程为反演。
说得通俗一点:若已知一个函数 f f f,那么反演做的事就是找出它的反函数。
例:函数 y = x + 1 y=x+1 y=x+1 的反函数就是 x = y − 1 x=y-1 x=y−1,而反演就是从前一个函数找到后一个函数的过程。
第一反演公式
首先直接给出结论:
若已知 f ( n ) = ∑ i = 1 n c n , i g ( i ) , g ( n ) = ∑ i = 1 n d n , i f ( i ) f(n)=\sum_{i=1}^nc_{n,i}g(i),g(n)=\sum_{i=1}^nd_{n,i}f(i) f(n)=∑i=1ncn,ig(i),g(n)=∑i=1ndn,if(i),那么系数 c n , i c_{n,i} cn,i 与系数 d n , i d_{n,i} dn,i 构成的矩阵之积一定是一个单位矩阵 。也就是说系数 c n , i c_{n,i} cn,i 与系数 d n , i d_{n,i} dn,i 构成的矩阵是互逆的。
数学化一点,就是当满足:
c 1 , 1 c 1 , 2 c 1 , 3 ... c 1 , n c 2 , 1 c 2 , 2 c 2 , 3 ... c 2 , n ... c n , 1 c n , 2 c n , 3 ... c n , n × d 1 , 1 d 1 , 2 d 1 , 3 ... d 1 , n d 2 , 1 d 2 , 2 d 2 , 3 ... d 2 , n ... d n , 1 d n , 2 d n , 3 ... d n , n = I \begin{bmatrix}c_{1,1}&c_{1,2}&c_{1,3}&\dots&c_{1,n}\\c_{2,1}&c_{2,2}&c_{2,3}&\dots&c_{2,n}\\&&\dots\\c_{n,1}&c_{n,2}&c_{n,3}&\dots&c_{n,n}\end{bmatrix}\times\begin{bmatrix}d_{1,1}&d_{1,2}&d_{1,3}&\dots&d_{1,n}\\d_{2,1}&d_{2,2}&d_{2,3}&\dots&d_{2,n}&\\&&\dots\\d_{n,1}&d_{n,2}&d_{n,3}&\dots&d_{n,n}\end{bmatrix}=I c1,1c2,1cn,1c1,2c2,2cn,2c1,3c2,3...cn,3.........c1,nc2,ncn,n × d1,1d2,1dn,1d1,2d2,2dn,2d1,3d2,3...dn,3.........d1,nd2,ndn,n =I
(如果没有这一项系数就是 0 0 0)。
其中 I I I 表示单位矩阵,即:
I = 1 0 0 ... 0 0 1 0 ... 0 0 0 1 ... 0 ... 0 0 0 ... 1 I=\begin{bmatrix}1&0&0&\dots&0\\0&1&0&\dots&0\\0&0&1&\dots&0\\&&\dots\\0&0&0&\dots&1\end{bmatrix} I= 10000100001...0............0001
此时 f ( n ) = ∑ i = 1 n c n , i g ( i ) ⟺ g ( n ) = ∑ i = 1 n d n , i f ( i ) f(n)=\sum_{i=1}^nc_{n,i}g(i)\iff g(n)=\sum_{i=1}^nd_{n,i}f(i) f(n)=∑i=1ncn,ig(i)⟺g(n)=∑i=1ndn,if(i)。
二项式反演
二项式反演是反演的一类,第一形式长这样:
f ( n ) = ∑ i = 0 n C n i g ( i ) ⟺ g ( n ) = ∑ i = 0 n ( − 1 ) n − i C n i f ( i ) f(n)=\sum_{i=0}^nC_n^ig(i)\iff g(n)=\sum_{i=0}^n(-1)^{n-i}C_n^if(i) f(n)=i=0∑nCnig(i)⟺g(n)=i=0∑n(−1)n−iCnif(i)
证明如下:
假设原式成立,则:
f ( n ) = ∑ i = 0 n ( n i ) ∑ j = 0 i ( − 1 ) i − j ( i j ) f ( j ) = ∑ i = 0 n ∑ j = 0 i ( − 1 ) i − j ( n i ) ( i j ) f ( j ) = ∑ j = 0 n ∑ i = j n ( − 1 ) i − j ( n i ) ( i j ) f ( j ) = ∑ j = 0 n ∑ i = j n ( − 1 ) i − j ( n j ) ( n − j i − j ) f ( j ) = ∑ j = 0 n ( n j ) f ( j ) ∑ i = j n ( − 1 ) i − j ( n − j i − j ) = ∑ j = 0 n ( n j ) f ( j ) ∑ t = 0 n − j ( − 1 ) t ( n − j t ) \begin{aligned}f(n)&=\sum_{i=0}^n\binom{n}{i}\sum_{j=0}^i(-1)^{i-j}\binom{i}{j}f(j)\\&=\sum_{i=0}^n\sum_{j=0}^i(-1)^{i-j}\binom{n}{i}\binom{i}{j}f(j)\\&=\sum_{j=0}^n\sum_{i=j}^n(-1)^{i-j}\binom{n}{i}\binom{i}{j}f(j)\\&=\sum_{j=0}^n\sum_{i=j}^n(-1)^{i-j}\binom{n}{j}\binom{n-j}{i-j}f(j)\\&=\sum_{j=0}^n\binom{n}{j}f(j)\sum_{i=j}^n(-1)^{i-j}\binom{n-j}{i-j}\\&=\sum_{j=0}^n\binom{n}{j}f(j)\sum_{t=0}^{n-j}(-1)^t\binom{n-j}{t}\end{aligned} f(n)=i=0∑n(in)j=0∑i(−1)i−j(ji)f(j)=i=0∑nj=0∑i(−1)i−j(in)(ji)f(j)=j=0∑ni=j∑n(−1)i−j(in)(ji)f(j)=j=0∑ni=j∑n(−1)i−j(jn)(i−jn−j)f(j)=j=0∑n(jn)f(j)i=j∑n(−1)i−j(i−jn−j)=j=0∑n(jn)f(j)t=0∑n−j(−1)t(tn−j)
我们知道: ∑ i = 0 n ( − 1 ) i C n i = 0 \sum_{i=0}^n(-1)^iC_n^i=0 ∑i=0n(−1)iCni=0,这是因为杨辉三角上奇数位的数字和和偶数位的数字和一样,都等于上一层的数字之和,但是当 n = 0 n=0 n=0 时,这个式子是等于 1 1 1 的,所以我们可以得到:
当 n − j = 0 n-j=0 n−j=0,即 j = n j=n j=n 时,有:
f ( n ) = ( n n ) f ( n ) = f ( n ) f(n)=\binom{n}{n}f(n)=f(n) f(n)=(nn)f(n)=f(n)
等式成立,所以原式均成立。得证。
当然,我们也可以直接用第一反演公式来解决这个问题,不过计算比较复杂,此处不详细展开。
相较于二项式反演的第一形式,另一个我们常用的是二项式反演的第二形式:
f ( i ) = ∑ j = i n ( j i ) g ( j ) ⟺ g ( i ) = ∑ j = 1 n ( − 1 ) j − i ( j i ) f ( j ) f(i)=\sum_{j=i}^n\binom{j}{i}g(j)\iff g(i)=\sum_{j=1}^n(-1)^{j-i}\binom{j}{i}f(j) f(i)=j=i∑n(ij)g(j)⟺g(i)=j=1∑n(−1)j−i(ij)f(j)
证明同上,直接拆开一通算就行。
那么二项式反演有什么用呢?或者说的广泛一点:反演有什么用?我们来看个例子:
有 n n n 个物品,每个物品有 m m m 个选定的位置,问有多少种方案使得所有物品都能恰好放在它选定的一个位置上。
其实我们反过来考虑:这个问题件就是大名鼎鼎的错排问题,就是说:有很多个物品,问有多少种方案使得存在一些物品摆放的位置是错的。
那么我们可以设 f ( i ) f(i) f(i) 表示有 i i i 个物品时总的摆放方案数, g ( i ) g(i) g(i) 表示恰好有 i i i 个物品被错排时的方案数,那么我们很容易得到这样一个式子:
f ( i ) = ∑ j = 0 i ( i j ) g ( j ) f(i)=\sum_{j=0}^i\binom{i}{j}g(j) f(i)=j=0∑i(ji)g(j)
意思是从 i i i 个物品中随机选出 j j j 个物品的方案数乘上这 j j j 个物品错排的方案数全部加起来就是总的方案数,现在我们可以利用二项式反演得到:
g ( i ) = ∑ j = 0 i ( − 1 ) i − j ( i j ) f ( j ) g(i)=\sum_{j=0}^i(-1)^{i-j}\binom{i}{j}f(j) g(i)=j=0∑i(−1)i−j(ji)f(j)
其中, f ( i ) f(i) f(i) 是很好求的,答案就是 i ! i! i!,但是 g ( i ) g(i) g(i) 并不好求,不过通过我们的转化,我们能通过好求的 f ( i ) f(i) f(i) 来求出相对而言更难求的 g ( i ) g(i) g(i)。
所以,反演的作用就在于:通过反演让已知的信息 和未知的信息的位置调换,从而解决问题。
其实通过上面错排问题的例子,我们也能感受的出来:二项式反演的本质其实就是容斥,类似于奇加偶减一样,只不过用了一种更宽泛、更公式化的表示方法表现了出来。
莫比乌斯反演
在讲莫比乌斯反演之前,我觉得有必要先好好讲一下狄利克雷卷积。
狄利克雷卷积
先对即将出现在文章中的几个专有词汇进行解释:
- 数论函数:指定义域是整数的函数。
- 积性函数:指满足 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b) 的函数,属于数论函数的一种。
- 单位函数: ε ( n ) = n = 1 \varepsilon(n)=n=1 ε(n)=n=1,即当 n n n 等于 1 1 1 时原函数等于 1 1 1,否则等于 0 0 0。注意单位函数是数论函数。
- 常函数: I ( n ) = 1 \operatorname{I}(n)=1 I(n)=1,即不论 n n n 等于多少,函数值均等于 1 1 1。注意:常函数是数论函数。
- 恒等函数: id ( n ) = n \operatorname{id}(n)=n id(n)=n,也就是函数值就是自变量值。注意:恒等函数是数论函数。
- 欧拉函数: ϕ ( n ) \phi(n) ϕ(n),表示 n n n 的最简剩余系的大小,具体定义可参见这篇文章。注意:欧拉函数是积性函数。
其他新的定义我会直接讲。
进入正题:
若两个函数 f f f 和 g g g 进行了狄利克雷卷积,那么最终答案写作 f ∗ g f*g f∗g,定义为:
( f ∗ g ) ( i ) = ∑ d ∣ i f ( d ) ⋅ g ( i d ) (f*g)(i)=\sum_{d\mid i}f(d)\cdot g(\frac{i}{d}) (f∗g)(i)=d∣i∑f(d)⋅g(di)
换种方式写就是:
( f ∗ g ) ( i ) = ∑ a b = i , a , b ∈ Z f ( a ) ⋅ g ( b ) (f*g)(i)=\sum_{ab=i,a,b\isin\Z}f(a)\cdot g(b) (f∗g)(i)=ab=i,a,b∈Z∑f(a)⋅g(b)
这个定义看上去有点奇怪,甚至有点让人无法理解:为什么要这样定义?不过当它和莫比乌斯函数放在一起的时候就会呈现另一番风采。
莫比乌斯函数
莫比乌斯函数 μ ( n ) \mu(n) μ(n) 的定义有些复杂。具体来说:当 n n n 等于 1 1 1 时为 1 1 1。当 n n n 被质因数分解后没有哪个质因子的指数大于 1 1 1,那么就是 ( − 1 ) k (-1)^k (−1)k,其中 k k k 是 n n n 的质因数个数,比如说 μ ( 6 ) = 1 \mu(6)=1 μ(6)=1。其余情况全是 0 0 0。注意:莫比乌斯函数是积性函数。
我们把莫比乌斯函数和狄利克雷卷积放在一起就会看到一些很奇妙的等式:
μ ∗ I = ε , μ ∗ id = ϕ \mu*\operatorname{I}=\varepsilon,\mu*\operatorname{id}=\phi μ∗I=ε,μ∗id=ϕ
上面的公式都有证明方法,不过第二个公式有点难证明,我们来讲一下第一个公式的证明方法。
我们知道狄利克雷卷积的定义是 ( f ∗ g ) ( i ) = ∑ d ∣ i f ( d ) ⋅ g ( i d ) (f*g)(i)=\sum_{d\mid i}f(d)\cdot g(\frac{i}{d}) (f∗g)(i)=∑d∣if(d)⋅g(di),那么首先当 i = 1 i=1 i=1 时, ( μ ∗ I ) ( 1 ) = 1 (\mu*\operatorname{I})(1)=1 (μ∗I)(1)=1 这是肯定的。当 i > 1 i>1 i>1 时,我们考虑把 i i i 质因数分解了。根据莫比乌斯函数的定义,最终留下参与计算的肯定只有质因数没重复出现的那些数。
现在就相当于这些数从大到小连边,然后从 i i i 开始跳,每次可以跳任意多步,每跳一次当前的方案数(当然,每次肯定都是 1 1 1)就乘上一个 − 1 -1 −1,问跳到 1 1 1 的方案数。我们考虑从这些数中选出 k k k 个数作为中间点,所以最终答案就是 ∑ k = 1 i − 1 ( − 1 ) k ( i k ) \sum_{k=1}^{i-1}(-1)^{k}\binom{i}{k} ∑k=1i−1(−1)k(ki),这个式子最终的答案明显是 0 0 0。所以除了 i = 1 i=1 i=1 之外的其他情况最终答案都是 0 0 0,于是我们就证到了这个结论。
证明过程有点抽象,看不太懂的也可以选择直接跳过,如果你硬要想明白,那么我不介意给你一张图:

当然了,根据 μ ∗ I = ε \mu*\operatorname{I}=\varepsilon μ∗I=ε 我们可以得到:
∑ d ∣ n μ ( d ) = { 1 n = 1 0 n ≠ 1 \sum_{d\mid n}\mu(d)=\begin{cases}1&n=1\\0&n\not=1\end{cases} d∣n∑μ(d)={10n=1n=1
莫比乌斯反演
讲完莫比乌斯函数,我们正式进入莫比乌斯反演。
莫比乌斯反演的一般形式:
f ( n ) = ∑ d ∣ n g ( d ) ⟺ g ( n ) = ∑ d ∣ n μ ( n d ) f ( d ) f(n)=\sum_{d\mid n}g(d)\iff g(n)=\sum_{d\mid n}\mu(\frac{n}{d})f(d) f(n)=d∣n∑g(d)⟺g(n)=d∣n∑μ(dn)f(d)
证明很简单,用狄利克雷卷积就行:
原命题等价于: f = I ∗ g ⟺ g = μ ∗ f f=\operatorname{I}*g\iff g=\mu*f f=I∗g⟺g=μ∗f。
我们对左边的等式左右同时卷积一个函数 μ \mu μ,得到:
f ∗ μ = μ ∗ I ∗ g f*\mu=\mu*\operatorname{I}*g f∗μ=μ∗I∗g
因为卷积具有交换律和结合律,所以我们可以得到:
f ∗ μ = ( μ ∗ I ) ∗ g = ε ∗ g = g f*\mu=(\mu*\operatorname{I})*g=\varepsilon*g=g f∗μ=(μ∗I)∗g=ε∗g=g
因为任何函数和单位函数进行狄利克雷卷积之后还是原函数,所以得证。
必要性一样的证法。
注意:因为莫比乌斯反演公式的特殊性,一帮情况下我们只会在出现类似于最大公约数、整除这些词汇的情况下使用莫比乌斯反演。