卢卡斯定理
求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⌋!,可以递归处理