Skip to content

反演主要用于替换组合式求和,重点在于推式子,原理暂略。

二项式反演 ​

形式 0:

g(n)=∑i=0n(−1)i(ni)f(i)⇔f(n)=∑i=0n(−1)i(ni)g(i)

形式 1:

g(n)=∑i=0n(ni)f(i)⇔f(n)=∑i=0n(−1)n−i(ni)g(i)

形式 2:

g(n)=∑i=n∞(in)f(i)⇔f(n)=∑i=n∞(−1)i−n(in)g(i)

这里默认数列具有有限支撑,即存在 N 使得 i>N 时 f(i)=0,从而两个看似无限的和实际都是有限和。令

F(x)=∑i=0Nf(i)xi,G(x)=∑i=0Ng(i)xi,

则正变换等价于 G(x)=F(1+x),代入 x−1 即得到逆变换。若用于真正的无限数列,必须另外保证相关级数收敛且允许交换求和次序;仅写成普通形式幂级数并不会自动使每个系数中的无限和有定义,还需要局部有限性或相应的拓扑收敛条件。

欧拉反演 ​

Euler 函数恒等式为

n=∑d∣nφ(d).

对其使用 Möbius 反演,可得对应的反演式

φ(n)=∑d∣nμ(d)nd=n∑d∣nμ(d)d.

因此这一节是 Möbius 反演在 Euler 函数上的特殊应用,而不是另一种独立的通用反演。

莫比乌斯反演 ​

g(n)=∑d∣nf(d)⇔f(n)=∑d∣nμ(d)g(nd)

特殊地,∑d∣nμ(d)=[n=1]

更特殊地,∑d∣gcd(i,j)μ(d)=[gcd(i,j)=1]

子集反演 ​

以下 S,T 均为同一个有限全集 U 的子集。对子集方向求和时,有

g(S)=∑T⊆Sf(T)⇔f(S)=∑T⊆S(−1)|S|−|T|g(T).

另一组是对超集方向求和:

g(S)=∑S⊆T⊆Uf(T)⇔f(S)=∑S⊆T⊆U(−1)|T|−|S|g(T).

两组公式方向不同,第二组不能仅由第一组的前提推出。

单位根反演 ​

设 m≥1,并在域 K 上运算。要求 m 在 K 中可逆,且 K 中存在一个 m 次本原单位根 ωm。在复数域中可以取 ωm=e2πi/m;在素域 Fp 中使用时,常见条件是 m∣(p−1),此时本原单位根和 m−1 都存在。

1m∑i=0m−1(ωm)i×d=[m∣d]

扩展到 d≡k(modm) 的情况:

1m∑i=0m−1ωmi×(d−k)=[d≡k(modm)]

把这个形式放到多项式上:对于多项式 f(x)=∑i=0naixi,求所有下标模 m 同余于 k 的系数之和。

∑i=0nai[i≡k(modm)]=∑i=0nai1m∑j=0m−1ωmj(i−k)=1m∑j=0m−1ωm−jk∑i=0nai(ωmj)i=1m∑j=0m−1ωm−jkf(ωmj).

时间复杂度:O(mT(n)),其中 T(n) 表示多项式单点求值的时间复杂度。

斯特林反演 ​

f(n)=∑i=0n{ni}g(i)⇔g(n)=∑i=0n(−1)n−i[ni]f(i)