前置芝士
扩展卢卡斯相对较为复杂,需要较多的前置芝士。
- 快速幂
- 质因数分解
- 组合数公式
- 扩展欧几里得(exgcd)求逆元
- 中国剩余定理(或excrt)
熟练阅读Latex
至于卢卡斯定理,那真的不重要。
问题形式
卢卡斯( L u c a s Lucas Lucas)和扩展卢卡斯( e x L u c a s exLucas exLucas)都用于求解形如 C n m m o d p C_{n}^{m} \mod p Cnmmodp的答案。当 p p p是质数时,直接用卢卡斯定理就可以*过去。
如果 p p p不是质数,就得用今天的主角——扩展卢卡斯定理求解。
求解思想
由于 p p p不是质数,那么我们考虑强行对其进行质因数分解:
p = ∏ i = 1 n p i a i p=\prod_{i=1}^{n}p_i^{a_i} p=i=1∏npiai
那么分解完后每一项 p i a i p_i^{a_i} piai之间两两互质,只要我们能得出每组 C n m m o d p i a i C_n^m \mod p_i^{a_i} Cnmmodpiai的答案,就可以用中国剩余定理合并得到最后的答案。
然后来考虑求解 C n m m o d p i a i C_n^m \mod p_i^{a_i} Cnmmodpiai,我们知道 C n m = n ! m ! × ( n − m ) ! C_n^{m}=\frac{n!}{m!\times (n-m)!} Cnm=m!×(n−m)!n!,那么我们也就是要求下面这个式子:
n ! m ! × ( n − m ) ! m o d p a \frac{n!}{m!\times (n-m)!}\mod p^{a} m!×