卢卡斯定理
求
Cnm mod p
设
m=a0p0+a1p1+⋯+akpk,n=b0p0+b1p1+⋯+bkpk
则
Cnm≡∏Cbiai(mod p)
扩展卢卡斯定理
好像这也不是什么定理,只是一个计算方法
计算
Cnm mod p
,其中
p=p1q1×p2q2×⋯pkqk
时,我们可以先求出
Cnm mod piqi
,然后用CRT合并。
那么怎么计算
Cnm mod piqi
呢?
Cnm=m!n!(m−n)!
,我们只需要算出
m!,n!−1,(m−n)!−1
,然后乘在一起。
zjt大爷:
n!
可能在模
piqi
的意义下没有逆元啊,那这就是错的了啊
其实这里求得不是逆元(可能没有逆元),求出来的是
a×pib(gcd(a,p)=1)
,前面的
a
用逆元,后面的次数加加减减一下就好了
问题转换成求
例如
n=19,p=3,q=2
:
19!
=1×2×3×⋯×19
=(1×2×4×5×7×8⋯×16×17×19)×(3×6×9×12×15×18)
=(1×2×4×5×7×8⋯×16×17)×19×36×(1×2×3×4×5×6)
=(1×2×4×5×7×8)2×19×36×(1×2×3×4×5×6)
上面这个式子分为四部分:
第一部分: (1×2×4×5×7×8)2 。这部分的数不超过 pq 个,可以暴力算
第二部分: 19 。这部分的数不超过 pq 个,可以暴力算
第三部分: 36 。这个在最后处理时求出 m!,n!,(m−n)! 分别有多少个 p (设为
第四部分: 1×2×3×4×5×6 。这个是 ⌊np⌋! ,可以递归处理