lucas定理及其拓展的推导
lucas定理及其拓展的推导
我的前一篇博客—— lucas定理 https://mp.csdn.net/mdeditor/100550317#主要是给出了lucas的结论和模板,不涉及推导。
本篇文章主要侧重lucas定理及其拓展的公式推导。先从pwp^wpw的一般情况进行推导,最后令w=1w=1w=1进一步推导出了lucas定理的结论。可能会比较枯燥。
想直接阅读结论的请转向这篇博客——拓展lucas结论及模板 https://blog.csdn.net/yuyilahanbao/article/details/100570075
(nm) mod pw\tbinom{n}{m} \bmod p^w(mn)modpw的求取
p是素数。主要是计算(nm) mod pw\tbinom{n}{m} \bmod p^w(mn)modpw的值。不想看推导过程的可以直接往下翻到下划线以后看结论。
对于(nm)=n!m!(n−m)!\tbinom{n}{m} = \frac{n!}{m!(n-m)!}(mn)=m!(n−m)!n!.
对于n!=1×2×3×…×n.n!=1 \times 2 \times 3 \times \ldots \times n.n!=1×2×3×…×n.
我们将这些数进行分组。假设k=⌊np⌋, r=n mod p;  u=npw, v=n mod pwk=\lfloor \frac{n}{p} \rfloor,\, r = n \bmod p;\;u=\frac{n}{p^w},\, v=n \bmod {p^w}k=⌊pn⌋,r=nmodp;u=pwn,v=nmodpw
把所有p的倍数抽出来,组成一组,它们的乘积记为AAA,易得A=∏i=1k(i×p)=pw×k!A=\prod\limits_{i=1}^{k}(i \times p)=p^w \times k!A=i=1∏k(i×p)=pw×k!。
剩下的数中,把在这个区间内[upw+1,upw+v][up^w+1,up^w+v][upw+1,upw+v]中的数分为一组,记乘积为BBB.由于每个数都不是ppp的倍数,则BBB与pwp^wpw互质,BBB关于pwp^wpw的逆元Bpw−1B_{p^w}^{-1}Bpw−1存在。
剩下的每个数a,把⌊apw⌋\lfloor \frac{a}{p^w} \rfloor⌊pwa⌋相同的数分在一组,并把⌊apw⌋\lfloor \frac{a}{p^w} \rfloor⌊pwa⌋作为它们的组号。每一组的乘积分别记作C0,C2,C3,C4,…,Cu−1C_0,C_2,C_3,C_4,\ldots,C_{u-1}C0,C2,C3,C4,…,Cu−1。同理,显然CiC_iCi与pwp^wpw互质,逆元存在。另外,每一组的乘积关于pwp^wpw是同模的,因为每一组的元素都是[pwi+1,pw(i+1))\left[p^wi+1,p^w(i+1)\right)[pwi+1,pw(i+1))的所有元素中去掉了ppp的倍数。
于是n!=AB∏i=0u−1Ci=pw×k!×B∏i=0u−1Cin!=AB\prod\limits_{i=0}^{u-1}C_i=p^w\times k! \times B\prod\limits_{i=0}^{u-1}C_in!=ABi=0∏u−1Ci=pw×k!×Bi=0∏u−1Ci.
回到原来组合数的问题,对于n,m,n−mn,m,n-mn,m,n−m依然有上面k,r,u,vk,r,u,vk,r,u,v的定义,只是分别用下标1,2,31,2,31,2,3区分。
于是(nm)=n!m!(n−m)!=pk1−k2−k3×k1!×B1×∏i=0u1−1Cik2!×k3!×B2×B3×∏i=0u2−1Ci×∏i=0u3−1Ci\tbinom{n}{m} = \frac{n!}{m!(n-m)!} = \frac{p^{k_1-k_2-k_3}\times {k_1}! \times B_1 \times \prod\limits_{i=0}^{u_1-1}C_i}{{k_2}! \times {k_3}! \times B_2 \times B_3 \times \prod\limits_{i=0}^{u_2-1}C_i \times \prod\limits_{i=0}^{u_3-1}C_i}(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≥0k_1-k_2-k_3 \geq 0k1−k2−k3≥0,事实上,它只能取0或1.BBB系列,CCC系列都是与pwp^wpw互质的,而且k1!k2!×k3!\frac{{k_1}!}{{k_2}! \times {k_3}!}k2!×k3!k1!依旧是个整数,所以,可以直接把分母中BBB,CCC系列中的直接变成乘以逆元抹去。
假设Bi≡bi(modpw)B_i \equiv b_i \pmod{p^w}Bi≡bi(modpw),Ci≡c(modpw)C_i \equiv c \pmod{p^w}Ci≡c(modpw).b,c∈[1,pw)b,c \in \left[1,p^w\right)b,c∈[1,pw).
pk1−k2−k3×k1!×B1×∏i=0u1−1Cik2!×k3!×B2×B3×∏i=0u2−1Ci×∏i=0u3−1Ci≡pk1−k2−k3×b1×b2−1×b3−1×cu1×(c−1)u2×(c−1)u3×k1!k2!×k3!≡pk1−k2−k3×b1×b2−1×b3−1×cu1−u2−u3×k1!k2!×k3!(modpw)\frac{p^{k_1-k_2-k_3}\times {k_1}! \times B_1 \times \prod\limits_{i=0}^{u_1-1}C_i}{{k_2}! \times {k_3}! \times B_2 \times B_3 \times \prod\limits_{i=0}^{u_2-1}C_i \times \prod\limits_{i=0}^{u_3-1}C_i} \\ \equiv {
p^{k_1-k_2-k_3} \times b_1 \times {b_2}^{-1} \times {b_3}^{-1}
\times c^{u_1} \times (c^{-1})^{u_2} \times (c^{-1})^{u_3}
\times \frac{{k_1}!}{{k_2}! \times {k_3}!}
}\\ \equiv
{
p^{k_1-k_2-k_3} \times b_1 \times {b_2}^{-1} \times {b_3}^{-1}
\times c^{u_1-u_2-u_3}
\times \frac{{k_1}!}{{k_2}! \times {k_3}!}
} \pmod{p^w}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≥r2r_1 \geq r_2r1≥r2时,k1=k2+k3k_1=k_2+k_3k1=k2+k3,故上面这个式子最后分式的部分k1!k2!×k3!=(k1k2)\frac{{k_1}!}{{k_2}! \times {k_3}!}=\tbinom{k_1}{k_2}k2!×k3!k1!=(k2k1).
否则,k1=k2+k3+1k_1=k_2+k_3+1k1=k2+k3+1,最后的那个分式无法直接变成组合数,但是我们只需要分子分母同时乘以k1−k2k_1-k_2k1−k2,即可变成组合数。k1!k2!×k3!=(k1−k2)×(k1k2)\frac{{k_1}!}{{k_2}! \times {k_3}!}=(k_1-k_2) \times \tbinom{k_1}{k_2}k2!×k3!k1!=(k1−k2)×(k2k1)
以上最后几行就是结论了,最后再次强调一下各个下标,字母代表的含义。
与n,m,n-m有关的量分别用下标1,2,3区分。
k,r是除以ppp的商与余数,u,v是除以模数pwp^wpw的商与余数。
b是最后剩下的v个数中不是p的倍数的数的乘积。
c是[1,pw]\left[1,p^w\right][1,pw]中不是p的倍数的数的乘积。
从结论中的式子可以看到b,c我们只关注模pkp^kpk意义下的值,因此可以预先求出[1..i][1..i][1..i]中不是p的倍数的数的乘积f(i)f(i)f(i)(模pkp^kpk意义下的)。
lucas定理的推导
特殊地,当w=1w=1w=1时,kkk和uuu,rrr和vvv是相同的。
故b≡r!(modp),c≡(p−1)!(modp)b \equiv r! \pmod{p},\quad c \equiv (p-1)! \pmod{p}b≡r!(modp),c≡(p−1)!(modp),因此代入式子,可以得到lucas定理的结论。
当r1≥r2r_1 \geq r_2r1≥r2时,k1=k2+k3k_1=k_2+k_3k1=k2+k3,故上面最后的式子可以化为ans≡r1!×(r2!)−1×(r3!)−1×(k1k2)(modp)ans \equiv {
{r_1}! \times ({r_2}!)^{-1} \times ({r_3}!)^{-1} \times \tbinom{k_1}{k_2} \pmod{p}
}ans≡r1!×(r2!)−1×(r3!)−1×(k2k1)(modp)否则,k1=k2+k3+1k_1=k_2+k_3+1k1=k2+k3+1,最后的那个分式无法直接变成组合数,但是我们只需要分子分母同时乘以k1−k2k_1-k_2k1−k2,即可变成组合数。k1!k2!×k3!=(k1−k2)×(k1k2)\frac{{k_1}!}{{k_2}! \times {k_3}!}=(k_1-k_2) \times \tbinom{k_1}{k_2}k2!×k3!k1!=(k1−k2)×(k2k1)。而ans≡p×r1!×(r2!)−1×(r3!)−1×c×(k1−k2)×(k1k2)≡0(modp)ans \equiv {
p \times {r_1}! \times ({r_2}!)^{-1} \times ({r_3}!)^{-1} \times c \times (k_1-k_2) \times \tbinom{k_1}{k_2}
} \equiv 0 \pmod{p}ans≡p×r1!×(r2!)−1×(r3!)−1×c×(k1−k2)×(k2k1)≡0(modp)
(nm) mod N\tbinom{n}{m} \bmod N(mn)modN的求取
N是任意正整数。对NNN进行素数分解。N=∏i=1qpikiN=\prod\limits_{i=1}^{q}p_i^{k_i}N=i=1∏qpiki.
对(nm) mod piki\tbinom{n}{m} \bmod p_i^{k_i}(mn)modpiki问题,可以通过上一小节的拓展lucas求得,记答案是cic_ici.
于是得到了qqq个线性同余方程,即线性同余方程组(nm)≡ci(modpiki)(1≤i≤q)\tbinom{n}{m} \equiv c_i \pmod{p_i^{k_i}} \quad (1 \leq i \leq q)(mn)≡ci(modpiki)(1≤i≤q).
对于线性同余方程组,并且注意到模数pikip_i^{k_i}piki两两互质,可以用中国剩余定理(也可以用拓欧)解出其通解x=x0+ktx=x_0+ktx=x0+kt。并且由于模数互质,k=lcm(piki)=N(1≤i≤q)k=lcm(p_i^{k_i})=N \quad (1 \leq i \leq q)k=lcm(piki)=N(1≤i≤q).所以在[0,N)[0,N)[0,N)内只有一个特解x0x_0x0,而这个特解就是(nm) mod N\tbinom{n}{m} \bmod N(mn)modN.
至此,组合数对任意数的取模我们都予以解决了。
lucas定理及其拓展的推导的更多相关文章
- 『Lucas定理以及拓展Lucas』
Lucas定理 在『组合数学基础』中,我们已经提出了\(Lucas\)定理,并给出了\(Lucas\)定理的证明,本文仅将简单回顾,并给出代码. \(Lucas\)定理:当\(p\)为质数时,\(C_ ...
- 数学:拓展Lucas定理
拓展Lucas定理解决大组合数取模并且模数为任意数的情况 大概的思路是把模数用唯一分解定理拆开之后然后去做 然后要解决的一个子问题是求模质数的k次方 将分母部分转化成逆元再去做就好了 这里贴一份别人的 ...
- 【bzoj2142】【礼物】拓展Lucas定理+孙子定理
(上不了p站我要死了,侵权度娘背锅) Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同,在小E心中分量 ...
- Lucas定理学习小记
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 = [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...
- HDU 5226 Tom and matrix(组合数学+Lucas定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...
- Lucas定理学习(进阶中)
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 = [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...
- 扩展Lucas定理
(1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 = [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...
- lucas定理学习
Lucas定理是用来求 c(n,m) mod p,p为素数的值. 表达式: C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 当我们遇到求一个N,M很大的组合数的时候,递推法就显得很耗 ...
- 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理
(上不了p站我要死了,当然是游戏原画啊) Description (题面倒是很有趣,就是太长了) 题意: 一个朝代流传的猪文文字恰好为N的k分之一,其中k是N的一个正约数(可以是1和N).不过具体是哪 ...
随机推荐
- docker挂载war包到tomcat容器中的注意点和坑
刚开始用docker,难免会遇到很多坑,这里分享一下: 一 挂载最好挂载目录 我刚开始挂载war包,结果发现容器里把挂载的war包当成目录了 二 本地路径必须是绝对路径,否则不管用 三 容器中使用vi ...
- 安装MySQL出现[Errno 256] No more mirrors to try
今天安装数据库时出现错误提示,如下图: 解决办法如下: yum clean all #清除仓库缓存 yum makecache #将服务器包信息缓存到本地 然后再执行数据库安装指令 yum insta ...
- TensorFlow 中的张量,图,会话
tensor的含义是张量,张量是什么,听起来很高深的样子,其实我们对于张量一点都不陌生,因为像标量,向量,矩阵这些都可以被认为是特殊的张量.如下图所示: 在TensorFlow中,tensor实际上就 ...
- Codeforces_733_C
http://codeforces.com/problemset/problem/733/C 从后往前一个个b对应一组组a. #include<iostream> #include< ...
- qt creator源码全方面分析(2-7)
目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...
- MySQL存储引擎——MyISAM与InnoDB区别
注:本文来自:https://blog.csdn.net/xifeijian/article/details/20316775 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型, ...
- 轻松搞懂Python递归函数的原理与应用
递归: 在函数的定义中,函数内部的语句调用函数本身. 1.递归的原理 学习任何计算机语言过程中,“递归”一直是所有人心中的疼.不知你是否听过这个冷笑话:“一个面包,走着走着饿了,于是就把自己吃了”. ...
- 《Head first设计模式》之模版方法模式
模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 有些人没有咖啡就活不下去:有些人则离不开茶.两者共同的 ...
- tomcat 多端口 多容器 多域名 配置
先强调一个原则: server下面可以有多个service,用于配置不同监听端口 service下面可以有多个Host,用于配置该端口下的不同域名 Host里可以包含多个Context,用于配置该端口 ...
- 【转载】Linux设备树(Device Tree)机制
转:Linux设备树(Device Tree)机制 目录 1. 设备树(Device Tree)基本概念及作用2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DT ...