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

卢卡斯定理

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! ,可以递归处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值