Lucas定理(卢卡斯定理)
Lucas定理
-
计算 \(\Large {n \choose k}\) \(\large \mod \ P\),其中 \(P\) 为质数。
-
\[{ n \choose k } \equiv { n\%P \choose k\%P } \times {\lfloor n/P \rfloor \choose \lfloor k/P \rfloor}\pmod P \]
exLucas
-
计算 \(\Large {n \choose k}\) \(\mod P\),其中 \(P\) 不保证为质数。
-
先将 \(P\) 分解质因数,\(P=\large\prod p_i^{k_i}\)。
-
分别计算 \(\Large {n \choose k}\) \(\large \mod \ {p_i^{k_i}}\) 的结果再用CRT合并起来就可以。
-
而 \(\Large {n \choose k}= \frac{n!}{k!(n-k)!}\),因此只需要分别算出 \(\large n! \mod \ {p_i^{k_i}}\)、\(\large k! \mod \ {p_i^{k_i}}\)、\(\large (n-k)! \mod \ {p_i^{k_i}}\) 即可,同时存储分子分母中 \(p_i\) 的次数用于约分。