扩展Lucas算法
介绍:
这段内容主要是关于组合数取模的数学知识介绍:
- 当正整数n,mn,mn,m很大,质数ppp较小时,求CnmC_{n}^{m}Cnm对ppp取模后的值可用Lucas定理;
- 若ppp不是质数且mmm较小,则可以用扩展Lucas定理,注意扩展Lucas定理与Lucas定理没有一定关心,你只要学会如下知识点就可以:1.质因数分解,2.逆元 ,3.CRT(中国剩余定理) 4.组合数的定义 ,5.组合数的定义。
第一步:中国剩余定理
设p=p1r1p2r2⋯pkrkp = p_{1}^{r_{1}} p_{2}^{r_{2}} \cdots p_{k}^{r_{k}}p=p1r1p2r2⋯pkrk,其中pip_{i}pi为质数。我们可以先求出Cnm%p1r1C_{n}^{m} \%p_{1}^{r_{1}}Cnm%p1r1,Cnm%p2r2C_{n}^{m} \%p_{2}^{r_{2}}Cnm%p2r2,⋯\cdots⋯,Cnm%pkrkC_{n}^{m} \%p_{k}^{r_{k}}Cnm%pkrk的值a1,a2,⋯,aka_{1},a_{2},\cdots,a_{k}a1,a2,⋯,ak。
我们把CnmC_{n}^{m}Cnm看作未知数x,可以得到以下方程组:
{ x≡a1(modp1r1)x≡a2(modp2r2)x≡a3(modp3r3)⋯⋯x≡an(modpkrk)\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}⎩ ⎨ ⎧x≡a1(modp1r1)x≡a2(modp2r2)x≡a3(modp3r3)⋯⋯x≡an(modpkrk)
利用中国剩余定理,我们可以求出aia_iai,它是以pirip^{r_i}_ipiri为周期出现的无穷多个解。而在[0,piri)[0,p^{r_i}_i)[0,piri)这个周期的解,就是Cnm C_{n}^{m} \ % pCnm 后的值。
那么a1,a2⋯,aka_{1},a_{2}\cdots,a_{k}a1,a2⋯,a


6687

被折叠的 条评论
为什么被折叠?



