二项式反演

会证二项式反演啦!

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

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

设你有两个数列f和g,满足:

gi=∑j=1i(ij)fj

那么一定有:

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

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

如果有:

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

那么:

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

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

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

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

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

∑j=ki(−1)i−j(ij)(jk)

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

∑j=ki(−1)i−ji!j!(i−j)!∗j!k!(j−k)!

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

(∑j=ki(−1)i−j1(i−j)!(j−k)!)∗i!k!

再在前面乘以(i−k)!,后面除以(i−k)!:

(∑j−ki(−1)i−j(i−k)!(i−j)!(j−k)!)∗i!k!(i−k)!

就等于:

(∑j=ki(−1)i−j(i−kj−k))∗(ik)

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

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

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