Lucas定理

绪论

对于大组合数对小质数求余的快速算法。

公式

假设 \(n=\prod_{i=0}^k{a_ip^i},m=\prod_{i=0}^k{b_ip^i}\) ,其中 \(p \in \mathbb{P}\) (就是说,是质数),那么有:

\[C_n^m=\prod_{i=0}^k{C_{a_i}^{b_i}} \]

容易发现,可以表示成:

\[C_n^m=C_{n\mod p}^{m\mod p}\times C_{[\frac{n}{p}]}^{[\frac{m}{p}]} \]

这就是一个容易编码的递归形式。

证明

定义两个多项式同余,为两个多项式的每一次项的系数在模意义下相等。

然后显然,我们有 \(C_n^i=\frac{n!}{i!(n-i)!}=\frac{n}{i}\frac{(n-1)!}{(i-1)!(n-i)!}=\frac{n}{i}C_{n-1}^{i-1}\equiv 0\pmod{p}\)

然后,我们构造关于 \(n\) 的组合数的生成函数:

\[(1+x)^n=(1+x)^{kp+r}=((1+x)^p)^k\times (1+x)^r\equiv(1+x^p)^k\times (1+x)^r\pmod{p} \]

显然,乘积中第 \(m\) 项的系数,要么是 \(0\) ,要么是 \(C_r^{m\mod p}\times C_k^{[\frac{m}{p}]}\) 。于是证明了其表达形式的第二种。

posted @ 2019-10-19 19:45  artart  阅读(110)  评论(0编辑  收藏  举报