扩展卢卡斯定理用于求如下式子(其中 p p p不一定是质数):
C n m m o d p C_n^m\ mod\ p Cnm mod p
我们将这个问题由总体到局部地分为三个层次解决。
层次一:原问题
首先对 p p p进行质因数分解:
p = ∏ i p i k i p=\prod_i p_i^{k_i} p=i∏piki
显然 p i k i p_i^{k_i} piki是两两互质的,所以如果分别求出 C n m m o d p i k i C_n^m\ mod\ p_i^{k_i} Cnm mod piki,就可以构造出若干个形如 C n m = a i m o d p i k i C_n^m=a_i\ mod\ p_i^{k_i} Cnm=ai mod piki的方程,然后用中国剩余定理即可求解。
层次二:组合数模质数幂
现在的问题就转化成了求如下式子(其中 p p p是质数):
C n m m o d p k C_n^m\ mod\ p^k Cnm mod pk
脑补一下组合数公式 C n m = n ! m ! × ( n − m ) ! C_n^m=\frac{n!}{m!\times (n-m)!} Cnm=m!×(n−m)!n!,发现由于 m ! m! m!和 ( n − m ) ! (n-m)! (n−m)!可能包含质因子 p p p,所以不能直接求他们对于 p k p^k pk的逆元。此时我们可以将 n ! n! n!、 m ! m! m!、 ( n − m ) ! (n-m)! (n−m)!中的质因子 p p p全部提出来,最后再乘回去即可。即变为下式( k 1 k1 k1为 n ! n! n!中质因子 p p p的次数, k 2 k2 k2、 k 3 k3 k3同理):
n ! p k 1 m ! p k 2 × ( n − m ) ! p