会证二项式反演啦!
其实推式子还是很好玩的,对吧。
先来说一下二项式反演的内容:
设你有两个数列(f)和(g),满足:
[g_i=sum_{j=1}^i {i choose j} f_j
]
那么一定有:
[f_i=sum_{j=1}^i (-1)^{i-j} {i choose j} g_j
]
其实二项式反演还有另一种形式,只不过最常用的是上面那种,在这里也写出来:
如果有:
[g_i=sum_{j=1}^i (-1)^j {i choose j} f_j
]
那么:
[f_i=sum_{j=1}^i (-1)^j {i choose j} g_j
]
下面来证明一下第一种形式。
把第一个式子代入第二个可以知道:
[f_i=sum_{j=1}^i (-1)^{i-j} {i choose j} sum_{k=1}^j {j choose k} f_k
]
整理一下,(f_k)的系数就是:
[sum_{j=k}^i (-1)^{i-j} {i choose j} {j choose k}
]
我们只要证明上面的式子等价于([i==k])即可,把二项式系数拆成阶乘的形式:
[sum_{j=k}^i (-1)^{i-j} frac{i!}{j!(i-j)!}*frac{j!}{k!(j-k)!}
]
消掉(j!),再把(i!)和(k!)提出来:
[Bigg( sum_{j=k}^i (-1)^{i-j} frac{1}{(i-j)!(j-k)!} Bigg) * frac{i!}{k!}
]
再在前面乘以((i-k)!),后面除以((i-k)!):
[Bigg( sum_{j-k}^i (-1)^{i-j} frac{(i-k)!}{(i-j)!(j-k)!} Bigg) * frac{i!}{k!(i-k)!}
]
就等于:
[Bigg( sum_{j=k}^i (-1)^{i-j} {i-k choose j-k} Bigg) * {i choose k}
]
不难发现前面那一项就是(i-k)的二项式系数错位相减,这是等于([i-k=0])的,也就是在(i!=k)时,前一项永远为(0)。而(i==k)时,前后两项都为(1),因此得证。
(note):有些题目的式子推出来是下标从(0)开始的,也可以用二项式反演。因为证明过程并没有用到那个(1)。
然后就可以用二项式反演来套路题目了,一般就是你要求(f),已经知道一个好求的(g)满足(g_i=sum_{j=1}^i {i choose j} f_j),然后就只要二项式反演一下就好了。