二项式反演

会证二项式反演啦!

其实推式子还是很好玩的,对吧。

先来说一下二项式反演的内容:

设你有两个数列fg,满足:

gi=j=1i(ij)fj

那么一定有:

fi=j=1i(1)ij(ij)gj

其实二项式反演还有另一种形式,只不过最常用的是上面那种,在这里也写出来:

如果有:

gi=j=1i(1)j(ij)fj

那么:

fi=j=1i(1)j(ij)gj

下面来证明一下第一种形式。

把第一个式子代入第二个可以知道:

fi=j=1i(1)ij(ij)k=1j(jk)fk

整理一下,fk的系数就是:

j=ki(1)ij(ij)(jk)

我们只要证明上面的式子等价于[i==k]即可,把二项式系数拆成阶乘的形式:

j=ki(1)iji!j!(ij)!j!k!(jk)!

消掉j!,再把i!k!提出来:

(j=ki(1)ij1(ij)!(jk)!)i!k!

再在前面乘以(ik)!,后面除以(ik)!

(jki(1)ij(ik)!(ij)!(jk)!)i!k!(ik)!

就等于:

(j=ki(1)ij(ikjk))(ik)

不难发现前面那一项就是ik的二项式系数错位相减,这是等于[ik=0]的,也就是在i!=k时,前一项永远为0。而i==k时,前后两项都为1,因此得证。

note:有些题目的式子推出来是下标从0开始的,也可以用二项式反演。因为证明过程并没有用到那个1

然后就可以用二项式反演来套路题目了,一般就是你要求f,已经知道一个好求的g满足gi=j=1i(ij)fj,然后就只要二项式反演一下就好了。