【算法】扩展卢卡斯详解

本文详细介绍了扩展卢卡斯定理及其在解决模数非质数时求解Cnm mod p问题的应用。内容包括前置知识如快速幂、质因数分解等,求解思路涉及质因数分解、中国剩余定理,并给出完整代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前置芝士

扩展卢卡斯相对较为复杂,需要较多的前置芝士。

  1. 快速幂
  2. 质因数分解
  3. 组合数公式
  4. 扩展欧几里得(exgcd)求逆元
  5. 中国剩余定理(或excrt)
  6. 熟练阅读Latex

至于卢卡斯定理,那真的不重要。

问题形式

卢卡斯( L u c a s Lucas Lucas)和扩展卢卡斯( e x L u c a s exLucas exLucas)都用于求解形如 C n m m o d    p C_{n}^{m} \mod p Cnmmodp的答案。当 p p p是质数时,直接用卢卡斯定理就可以*过去。

如果 p ​ p​ p不是质数,就得用今天的主角——扩展卢卡斯定理求解。

求解思想

由于 p p p不是质数,那么我们考虑强行对其进行质因数分解:
p = ∏ i = 1 n p i a i p=\prod_{i=1}^{n}p_i^{a_i} p=i=1npiai
那么分解完后每一项 p i a i ​ p_i^{a_i}​ piai之间两两互质,只要我们能得出每组 C n m m o d    p i a i ​ C_n^m \mod p_i^{a_i}​ Cnmmodpiai的答案,就可以用中国剩余定理合并得到最后的答案。

然后来考虑求解 C n m m o d    p i a i C_n^m \mod p_i^{a_i} Cnmmodpiai,我们知道 C n m = n ! m ! × ( n − m ) ! ​ C_n^{m}=\frac{n!}{m!\times (n-m)!}​ Cnm=m!×(nm)!n!,那么我们也就是要求下面这个式子:
n ! m ! × ( n − m ) ! m o d    p a \frac{n!}{m!\times (n-m)!}\mod p^{a} m!×(nm)!n!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值