Lucas/exLucas 略解

Lucas 是一种用来求解 C n m m o d    p C_n^m \mod p Cnmmodp p p p 为质数)的算法。

利用 exLucas 可以求解 p p p 不为质数的情况。

Lucas

前置知识:

  • 求乘法逆元

  • 暴力求组合数

这种算法是基于 Lucas 定理的:

p p p 为素数,将正整数 n , m n,m n,m 表示为 p p p 进制如下:

n = ( n 0 n 1 … n k ‾ ) p , m = ( m 0 m 1 … m k ‾ ) p n=(\overline{n_0n_1\dots n_k})_p,m=(\overline{m_0m_1\dots m_k})_p n=(n0n1nk)p,m=(m0m1mk)p

其中允许首位为零,且规定当 m > n m>n m>n C n m = 0 C_n^m=0 Cnm=0,则:

C n m ≡ C n 0 m 0 ⋅ C n 1 m 1 ⋅ ⋯ ⋅ C n k m k ( m o d    p   ) C_n^m\equiv C_{n_0}^{m_0}\cdot C_{n_1}^{m_1}\cdot \dots \cdot C_{n_k}^{m_k} (\mod p\ ) CnmCn0m0Cn1m1Cnkm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值