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

  1. 把所有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!。

  2. 剩下的数中,把在这个区间内[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​存在。

  3. 剩下的每个数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−1​Ci​=pw×k!×Bi=0∏u−1​Ci​.

回到原来组合数的问题,对于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​−1​Ci​×i=0∏u3​−1​Ci​pk1​−k2​−k3​×k1​!×B1​×i=0∏u1​−1​Ci​​

注意到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​−1​Ci​×i=0∏u3​−1​Ci​pk1​−k2​−k3​×k1​!×B1​×i=0∏u1​−1​Ci​​≡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).

  1. 当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​!​=(k2​k1​​).

  2. 否则,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​)×(k2​k1​​)


以上最后几行就是结论了,最后再次强调一下各个下标,字母代表的含义。

与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定理的结论。

  1. 当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×(k2​k1​​)(modp)

  2. 否则,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​)×(k2​k1​​)。而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​)×(k2​k1​​)≡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∏q​piki​​.

对(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定理及其拓展的推导的更多相关文章

  1. 『Lucas定理以及拓展Lucas』

    Lucas定理 在『组合数学基础』中,我们已经提出了\(Lucas\)定理,并给出了\(Lucas\)定理的证明,本文仅将简单回顾,并给出代码. \(Lucas\)定理:当\(p\)为质数时,\(C_ ...

  2. 数学:拓展Lucas定理

    拓展Lucas定理解决大组合数取模并且模数为任意数的情况 大概的思路是把模数用唯一分解定理拆开之后然后去做 然后要解决的一个子问题是求模质数的k次方 将分母部分转化成逆元再去做就好了 这里贴一份别人的 ...

  3. 【bzoj2142】【礼物】拓展Lucas定理+孙子定理

    (上不了p站我要死了,侵权度娘背锅) Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同,在小E心中分量 ...

  4. 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其次,我们 ...

  5. 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 < ...

  6. 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其次,我们 ...

  7. 扩展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其次,我们 ...

  8. 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很大的组合数的时候,递推法就显得很耗 ...

  9. 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理

    (上不了p站我要死了,当然是游戏原画啊) Description (题面倒是很有趣,就是太长了) 题意: 一个朝代流传的猪文文字恰好为N的k分之一,其中k是N的一个正约数(可以是1和N).不过具体是哪 ...

随机推荐

  1. 2019年,我花了3个月时间备考PMP

    ​ 经过几个月的准备,终于在2019年12月7日完成了PMP的考试,并于1月21日查到了成绩,喜获5A,意料之中.总结这次考试的具体情况:涉及题型虽然都没有超出大纲的范围,但是原题出现的概率似乎不高, ...

  2. spring5.0源码项目搭建

    一.准备相应环境以及下载spring项目 Ps:此处只讲解安装gradle 1.JDK安装 2.Idea安装 3.gradle安装 Gradle下载路径:https://services.gradle ...

  3. PAT (Advanced Level) Practice 1001-1005

    PAT (Advanced Level) Practice 1001-1005 PAT 计算机程序设计能力考试 甲级 练习题 题库:PTA拼题A官网 背景 这是浙大背景的一个计算机考试 刷刷题练练手 ...

  4. demon病毒样本分析

    1. 简介 该样本是前几周爆发的THINKPHP漏洞中,被批量上传的一个病毒样本.如图所示. 2. 分析 该样本未经混淆,加壳,所以直接拖到IDA中即可分析. 首先从main函数开始.做一些初始化的函 ...

  5. 使用 FRP 让部门同事都能直接远程桌面办公( 适用于 TEAM 和向日葵卡顿的用户)

    背景说明 这两天由于疫情的原因,很多公司都得在家远程上班,然后像我们这类小公司有没有 VPN 这些东西.传统的远程回公司只能依靠 Teamviewer 或者向日葵等工具.但是由于最近用户量很多,可能会 ...

  6. VS2013下OpenCV2.48配置

    VS2013+OpenCV2.48配置 一.下载OpenCV OpenCV下载地址http://opencv.org/ SDK下载链接在页面右侧 根据平台选择相应的SDK下载.在Windows开发下开 ...

  7. Codeforces_712_A

    http://codeforces.com/contest/712/problem/A 水题,写出来就看到规律了. #include<iostream> #include<cstri ...

  8. LeetCode22 生成所有括号对

    本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Generate Parentheses 难度 Medium 描述 Given n pairs of parentheses, wri ...

  9. Keepalived & LVS: 实现web的负载均衡和高可用

    目录 1. 环境介绍2. LVS DR模型中Realserver上的准备3. ha上的准备4. 配置keepalived5. 测试Realserver的切换6. failback页面测试7. keep ...

  10. python笔记21(面向对象课程三)

    今日内容 嵌套 特殊方法:__init__ type/isinstance/issubclass/super 异常处理 内容回顾 def login(): pass login() class Acc ...