lucas定理及其拓展的推导
我的前一篇博客—— lucas定理 https://mp.csdn.net/mdeditor/100550317#主要是给出了lucas的结论和模板,不涉及推导。
本篇文章主要侧重lucas定理及其拓展的公式推导。先从pw的一般情况进行推导,最后令w=1进一步推导出了lucas定理的结论。可能会比较枯燥。
想直接阅读结论的请转向这篇博客——拓展lucas结论及模板 https://blog.csdn.net/yuyilahanbao/article/details/100570075
(mn)modpw的求取
p是素数。主要是计算(mn)modpw的值。不想看推导过程的可以直接往下翻到下划线以后看结论。
对于(mn)=m!(n−m)!n!.
对于n!=1×2×3×…×n.
我们将这些数进行分组。假设k=⌊pn⌋,r=nmodp;u=pwn,v=nmodpw
-
把所有p的倍数抽出来,组成一组,它们的乘积记为A,易得A=i=1∏k(i×p)=pw×k!。
-
剩下的数中,把在这个区间内[upw+1,upw+v]中的数分为一组,记乘积为B.由于每个数都不是p的倍数,则B与pw互质,B关于pw的逆元Bpw−1存在。
-
剩下的每个数a,把⌊pwa⌋相同的数分在一组,并把⌊pwa⌋作为它们的组号。每一组的乘积分别记作C0,C2,C3,C4,…,Cu−1。同理,显然Ci与pw互质,逆元存在。另外,每一组的乘积关于pw是同模的,因为每一组的元素都是[pwi+1,pw(i+1))的所有元素中去掉了p的倍数。
于是n!=ABi=0∏u−1Ci=pw×k!×Bi=0∏u−1Ci.
回到原来组合数的问题,对于n,m,n−m依然有上面k,r,u,v的定义,只是分别用下标1,2,3区分。
于是(mn)=m!(n−m)!n!=k2!×k3!×B2×B3×i=0∏u2−1Ci×i=0∏u3−1Cipk1−k2−k3×k1!×B1×i=0∏u1−1Ci
注意到k1−k2−k3≥0,事实上,它只能取0或1.B系列,C系列都是与pw互质的,而且k2!×k3!k1!依旧是个整数,所以,可以直接把分母中B,C系列中的直接变成乘以逆元抹去。
假设Bi≡bi(modpw),Ci≡c(modpw).b,c∈[1,pw).
k2!×k3!×B2×B3×i=0∏u2−1Ci×i=0∏u3−1Cipk1−k2−k3×k1!×B1×i=0∏u1−1Ci≡pk1−k2−k3×b1×b2−1×b3−1×cu1×(c−1)u2×(c−1)u3×k2!×k3!k1!≡pk1−k2−k3×b1×b2−1×b3−1×cu1−u2−u3×k2!×k3!k1!(modpw).
-
当r1≥r2时,k1=k2+k3,故上面这个式子最后分式的部分k2!×k3!k1!=(k2k1).
-
否则,k1=k2+k3+1,最后的那个分式无法直接变成组合数,但是我们只需要分子分母同时乘以k1−k2,即可变成组合数。k2!×k3!k1!=(k1−k2)×(k2k1)
以上最后几行就是结论了,最后再次强调一下各个下标,字母代表的含义。
与n,m,n-m有关的量分别用下标1,2,3区分。
k,r是除以p的商与余数,u,v是除以模数pw的商与余数。
b是最后剩下的v个数中不是p的倍数的数的乘积。
c是[1,pw]中不是p的倍数的数的乘积。
从结论中的式子可以看到b,c我们只关注模pk意义下的值,因此可以预先求出[1..i]中不是p的倍数的数的乘积f(i)(模pk意义下的)。
lucas定理的推导
特殊地,当w=1时,k和u,r和v是相同的。
故b≡r!(modp),c≡(p−1)!(modp),因此代入式子,可以得到lucas定理的结论。
-
当r1≥r2时,k1=k2+k3,故上面最后的式子可以化为ans≡r1!×(r2!)−1×(r3!)−1×(k2k1)(modp)
-
否则,k1=k2+k3+1,最后的那个分式无法直接变成组合数,但是我们只需要分子分母同时乘以k1−k2,即可变成组合数。k2!×k3!k1!=(k1−k2)×(k2k1)。而ans≡p×r1!×(r2!)−1×(r3!)−1×c×(k1−k2)×(k2k1)≡0(modp)
(mn)modN的求取
N是任意正整数。对N进行素数分解。N=i=1∏qpiki.
对(mn)modpiki问题,可以通过上一小节的拓展lucas求得,记答案是ci.
于是得到了q个线性同余方程,即线性同余方程组(mn)≡ci(modpiki)(1≤i≤q).
对于线性同余方程组,并且注意到模数piki两两互质,可以用中国剩余定理(也可以用拓欧)解出其通解x=x0+kt。并且由于模数互质,k=lcm(piki)=N(1≤i≤q).所以在[0,N)内只有一个特解x0,而这个特解就是(mn)modN.
至此,组合数对任意数的取模我们都予以解决了。