扩展Lucas算法详解

扩展Lucas算法

介绍:

这段内容主要是关于组合数取模的数学知识介绍:

  • 当正整数 n , m n,m n,m很大,质数 p p p较小时,求 C n m C_{n}^{m} Cnm p p p取模后的值可用Lucas定理;
  • p p p不是质数且 m m m较小,则可以用扩展Lucas定理,注意扩展Lucas定理与Lucas定理没有一定关心,你只要学会如下知识点就可以:1.质因数分解,2.逆元 ,3.CRT(中国剩余定理) 4.组合数的定义 ,5.组合数的定义。

第一步:中国剩余定理

p = p 1 r 1 p 2 r 2 ⋯ p k r k p = p_{1}^{r_{1}} p_{2}^{r_{2}} \cdots p_{k}^{r_{k}} p=p1r1p2r2pkrk,其中 p i p_{i} pi为质数。我们可以先求出 C n m % p 1 r 1 C_{n}^{m} \%p_{1}^{r_{1}} Cnm%p1r1 C n m % p 2 r 2 C_{n}^{m} \%p_{2}^{r_{2}} Cnm%p2r2 ⋯ \cdots C n m % p k r k C_{n}^{m} \%p_{k}^{r_{k}} Cnm%pkrk的值 a 1 , a 2 , ⋯ , a k a_{1},a_{2},\cdots,a_{k} a1a2ak
我们把 C n m C_{n}^{m} Cnm看作未知数x,可以得到以下方程组:

{ x ≡ a 1 ( m o d p 1 r 1 ) x ≡ a 2 ( m o d p 2 r 2 ) x ≡ a 3 ( m o d p 3 r 3 ) ⋯ ⋯ x ≡ a n ( m o d p k r k ) \begin{cases} x \equiv a_{1} \pmod {p_{1}^{r_{1}}}\\ x \equiv a_{2} \pmod {p_{2}^{r_{2}}}\\ x \equiv a_{3} \pmod {p_{3}^{r_{3}}}\\ \cdots\cdots\\ x \equiv a_{n} \pmod {p_{k}^{r_{k}}} \end{cases} xa1(modp1r1)xa2(modp2r2)xa3(modp3r3)⋯⋯xan(modpkrk)

利用中国剩余定理,我们可以求出 a i a_i ai,它是以 p i r i p^{r_i}_i piri为周期出现的无穷多个解。而在 [ 0 , p i r i ) [0,p^{r_i}_i) [0,piri)这个周期的解,就是 C n m   C_{n}^{m} \ % p Cnm 后的值。
那么 a 1 , a 2 ⋯ , a k a_{1},a_{2}\cdots,a_{k} a1a2ak怎么求呢?

第二步:组合数模质数的幂

假设我们现在要求
C n m   m o d   P k ( [ P ∈ prime ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值