Lucas 定理
关于 Lucas 定理
起初,有一个 \(\binom{n}{m}\),我们想要计算它,但它可能太大了,我们只想要计算它取模质数 \(p\) 的结果。但当 \(n,m\) 真的很大的时候,我们还是没有办法计算它。这可真是太不好了。
考虑怎么计算 \(\binom{n}{m} \%\ p\) 的结果,容易想到:
\[\binom{n}{m}=\dfrac{n!}{m!(n-m)!}
\]
我们是否可以依据这个进行一些大力讨论得到结论呢?
好像有点麻烦。
但是,我们还有:
\[(1+x)^n=\sum_{i=0}^n\binom{n}{i}x^i
\]
我们想要计算 \(x^m\) 的系数模 \(p\) 的结果。
考虑到
\[(1+x)^n\equiv (1+x)^{p\lfloor \frac{n}{p}\rfloor}(1+x)^{n\% p}
\]
后面那一项指数小于 \(p\),没什么性质,也没什么影响,我们可以先不考虑。
前面一项我们已经拆出来了一个 \(p\),考虑这样做是否有什么性质。
\[(1+x)^p\equiv \sum_{i=0}^p\binom{p}{i}x^i (\bmod p)
\]
注意到 \(\binom{p}{i}\equiv[i=0 \or i=p]\),有
\[(1+x)^p\equiv1+x^p(\bmod p)
\]
那么
\[(1+x)^n\equiv(1+x^p)^{\lfloor\frac{n}{p}\rfloor}(1+x)^{n\% p}
\]
考虑这样一个多项式中 \(x^m\) 的系数。
前面项只会贡献 \(p\) 的倍数,后面项只会贡献 \(<p\) 的数,所以 \(x^m=x^{p\lfloor \frac{m}{p}\rfloor}x^{m\% p}\),也即,\(m\) 的分解方式是唯一的。
所以
\[\binom{n}{m}\equiv\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\binom{n\% p}{m\% p}(\bmod p)
\]
后面可以先预处理直接计算,前面可以递归计算。
复杂度 \(O(p)-O(\log n)\)。

浙公网安备 33010602011771号