中国剩余定理 && 扩展中国剩余定理

中国剩余定理 && 扩展中国剩余定理同余

中国剩余定理

问题

定理

M = ∏ i = 1 k m i M=\prod_{i=1}^km_i M=i=1kmi,即M是所有 m i m_i mi的最小公倍数

t i t_i ti为同余方程 M m i t i ≡   1 ( m o d    m i ) \frac{M}{m_i}t_i \equiv\ 1(\mod m_i) miMti 1(modmi)的最小非负整数解

则有一个解为 x = ∑ i = 1 k a i M m i t i x=\sum_{i=1}^ka_i\frac{M}{m_i}t_i x=i=1kaimiMti

通解为 x + i ∗ M ( i ∈ Z ) x+i*M(i\in Z) x+iM(iZ)
特别的,最小非负整数解为 ( x (x (x% M + M ) M+M) M+M)% M M M

证明

因为 M m i \frac{M}{m_i} miM是除 m i m_i mi之外的所有m的倍数
所以 ∀ k ≠ i , a i M m i t i ≡ 0 ( m o d    m k ) \forall k \not= i, a_i\frac{M}{m_i}t_i \equiv 0(\mod m_k) k=i,aimiMti0(modmk)
又有 M m i t i ≡   1 ( m o d    m i ) \frac{M}{m_i}t_i \equiv\ 1(\mod m_i) miMti 1(modmi)
两边同时乘 a i a_i ai a i M m i t i ≡ a i ( m o d    m i ) a_i\frac{M}{m_i}t_i \equiv a_i(\mod m_i) aimiMtiai(modmi)
带入 x = ∑ i = 1 k a i M m i t i x=\sum_{i=1}^ka_i\frac{M}{m_i}t_i x=i=1kaimiMti
原方程组成立
——算法竞赛进阶指南












代码实现

t i t_i ti同余式的求解可以用扩展欧几里得

void exgcd(int a,int b,int &x,int &y) { 
    if(b==0){ 
    x=1; y=0; return;} exgcd(b,a%b,x,y); int tp=x; x=y; y=tp-a/b*y; } int china() { 
    int ans=0,lcm=1,x,y; for(int i=1;i<=k;++i) lcm*=b[i]; for(int i=1;i<=k;++i) { 
    int tp=lcm/b[i]; exgcd(tp,b[i],x,y); x=(x%b[i]+b[i])%b[i];//x要为最小非负整数解 ans=(ans+tp*x*a[i])%lcm; } return (ans+lcm)%lcm; } 

一道模板题

洛谷P3868 [TJOI2009]猜数字 题解


扩展中国剩余定理

问题

模板题 洛谷P4777 【模板】扩展中国剩余定理(EXCRT)

求解

所以整个算法的思路就是求解k次扩展欧几里得

lt exgcd(lt a,lt b,lt &x,lt &y) { 
     if(b==0){ 
    x=1;y=0;return a;} lt gcd=exgcd(b,a%b,x,y); lt tp=x; x=y; y=tp-a/b*y; return gcd; } lt excrt() { 
     lt x,y,k; lt M=bi[1],ans=ai[1];//第一个方程的解特判 for(int i=2;i<=n;i++) { 
     lt a=M,b=bi[i],c=(ai[i]-ans%b+b)%b;//ax≡c(mod b) lt gcd=exgcd(a,b,x,y),bg=b/gcd; if(c%gcd!=0) return -1; //判断是否无解 x=mul(x,c/gcd,bg); ans+=x*M;//更新前k个方程组的答案 M*=bg;//M为前k个m的lcm ans=(ans%M+M)%M; } return (ans%M+M)%M; } 

update

针对一些对代码的疑问做点解答

Q:c=(ai[i]-ans%b+b)%b是什么意思

我们推导出 t ∗ M ≡ a k − x ( m o d    m k ) t*M \equiv a_k-x(\mod m_k) tMakx(modmk)
其中 a k − x a_k-x akx对应 a x ≡ c ( m o d    b ) ax≡c(\mod b) axc(modb)中的c,这句代码里 a n s ans ans对应 x x x b b b对应 m k m_k mk
所以这句话就是把 a k − x a_k-x akx先对 m k m_k mk取模




Q:为啥不加个括号变成c=((ai[i]-ans)%b+b)%b

ans%b的范围是[0,b-1),a[i]-ans%b+b一定不会小于0的,当然加了也没问题

Q:为什么 M ∗ = b g M*=bg M=bg而不是 M ∗ = b M*=b M=b

这里bg=b/gcd(a,b)对应到推到部分公式里的就是 b g = m k / g c d ( m k , L C M i = 1 k − 1 m i ) bg=m_k/gcd(m_k,LCM_{i=1}^{k-1}m_i) bg=mk/gcd(mk,LCMi=1k1mi)
M ∗ = b g M*=bg M=bg明显就是令M为前k个m的最小公倍数

Q:这句话x=mul(x,c/gcd,bg)为什么要乘c/gcd,为什么模数是bg

建议复习扩展欧几里得

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203418.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午9:50
下一篇 2026年3月19日 下午9:51


相关推荐

  • 沧州文化_沧州古代雅称

    沧州文化_沧州古代雅称沧洲东临渤海,北靠京津,有利的地形形成了四通八达的交通。沧州文化历史悠久,从战国时期沧州就因渤海而得名。沧州人民民风淳朴、勇敢、刚强加上历史的条件关系被人民称为“武建泱泱乎有表海熊风” 沧州的“武术之乡”已被四方的人知晓,那么沧州本土文化你又了解多少?本专题带您了解更多关于沧州文化的内容。农业特产沧州金丝小枣金丝小枣沧州红枣又称金丝小枣,沧县、献县、泊头交界处及其周围是金丝小枣生产地。其中…

    2022年8月18日
    16
  • Ubuntu安装Nginx_ubuntu gedit命令

    Ubuntu安装Nginx_ubuntu gedit命令目录ubuntu安装nginx 一、apt-get安装nginx 二、下载nginx包安装 ubuntu安装nginx目前支持两种安装方式,一种是apt-get的方式,另一种是根据包安装的方式为方便我统一使用root用户一、apt-get安装nginx#切换至root用户sudosurootapt-getinstallnginx查看nginx是否安装成功nginx-v1启动nginxservicenginxstart..

    2026年1月22日
    5
  • 红旗 Linux 官方社区_红旗车机系统3.0

    红旗 Linux 官方社区_红旗车机系统3.0红旗inWise操作系统V8.0英文名是RedFlaginWiseV8.0,曾经让很多国内Linux用户所应用的国产操作系统,该版本是对系统软件包组件的升级和稳定性易用性的整体提升。对于老电脑的来说,安装该版本是一个可取的决定,现在提供红旗inWise操作系统V8.0的下载。RedFlaginWiseV8.0主要新特性1、最新的稳定内核3.6.11和各种驱动程序包,使系统具备更好的硬件…

    2022年8月20日
    19
  • springboot集成hadoop实战

    springboot集成hadoop实战springboot 集成 hadoop 实现 hdfs 增删改查 maven 坐标 dependency groupId org apache hadoop groupId artifactId hadoop common artifactId version hadoop version version lt dependency

    2026年3月16日
    2
  • Tomcat安装及配置教程[通俗易懂]

    Tomcat安装及配置教程[通俗易懂]步骤一:下载Tomcat链接如下:https://tomcat.apache.org/注意:要根据自己的JDK版本选择Tomcat的版本。因本人java版本为10.0.2,故选择Tomcat9.0.31版本(Windows请自行选择64位或32位)步骤二:配置环境变量新建系统环境变量:修改系统Path(变量值末尾添加%CATALINA_HOME%\bin…

    2022年6月4日
    34
  • 绝了!即梦AI一键生成超精美艺术字,PPT制作效率拉满

    绝了!即梦AI一键生成超精美艺术字,PPT制作效率拉满

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号