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)ni(ni)g(i)

形式 2

g(n)=i=n(in)f(i)f(n)=i=n(1)in(in)g(i)

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

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

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

欧拉反演

Euler 函数恒等式为

n=dnφ(d).

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

φ(n)=dnμ(d)nd=ndnμ(d)d.

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

莫比乌斯反演

g(n)=dnf(d)f(n)=dnμ(d)g(nd)

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

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

子集反演

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

g(S)=TSf(T)f(S)=TS(1)|S||T|g(T).

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

g(S)=STUf(T)f(S)=STU(1)|T||S|g(T).

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

单位根反演

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

1mi=0m1(ωm)i×d=[md]

扩展到 dk(modm) 的情况:

1mi=0m1ωmi×(dk)=[dk(modm)]

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

i=0nai[ik(modm)]=i=0nai1mj=0m1ωmj(ik)=1mj=0m1ωmjki=0nai(ωmj)i=1mj=0m1ωmjkf(ωmj).

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

斯特林反演

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