卢卡斯定理&扩展卢卡斯定理

来源:互联网 发布:神木法院淘宝网下载 编辑:程序博客网 时间:2024/05/29 13:25

卢卡斯定理

Cnm mod p
m=a0p0+a1p1++akpk,n=b0p0+b1p1++bkpk
CnmCbiai(mod p)

扩展卢卡斯定理

好像这也不是什么定理,只是一个计算方法
计算Cnm mod p,其中p=p1q1×p2q2×pkqk时,我们可以先求出Cnm mod piqi,然后用CRT合并。
那么怎么计算Cnm mod piqi呢?
Cnm=m!n!(mn)!,我们只需要算出m!,n!1,(mn)!1,然后乘在一起。
zjt大爷:n!可能在模piqi的意义下没有逆元啊,那这就是错的了啊
其实这里求得不是逆元(可能没有逆元),求出来的是a×pib(gcd(a,p)=1),前面的a用逆元,后面的次数加加减减一下就好了
问题转换成求n! mod pq
例如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!,(mn)!分别有多少个p(设为x,y,z),则答案要乘上pxyz
第四部分:1×2×3×4×5×6。这个是np!,可以递归处理

原创粉丝点击