【算法】扩展卢卡斯详解

前置芝士

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

  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!×

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值