【模板】扩展中国剩余定理(EXCRT)

news/2025/10/29 16:34:44/文章来源:https://www.cnblogs.com/rp-plus-plus/p/19174819

算法介绍

孙子定理是中国古代求解一次同余式方程组的方法。是数论中一个重要定理。又称中国余数定理。一元线性同余方程组问题最早可见于中国南北朝时期的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下:

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。

用现代数学的语言来分析这个问题,中国剩余定理给出了以下的一元线性同余方程组:

\[\left\{\begin{matrix}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\\\vdots\\x\equiv a_k\pmod {m_k}\end{matrix}\right.\]

在中国剩余定理中给出了 \(m_1,m_2,\dots,m_k\) 两两互质的条件,但是在扩展中国剩余定理中并没有这个条件,相较于前者,后者更难解决。

问题简述

问题就是,给定一个 \(k\) 个方程的线性同余方程组:

\[\left\{\begin{matrix}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\\\vdots\\x\equiv a_k\pmod {m_k}\end{matrix}\right.\]

其中 \(m_1,m_2,\dots,m_k\) 不一定两两互质。

解题思路

我们的大致解题思路为将 \(2\) 个方程合并为一个新的方程,以此类推,最终我们会得到一个 \(x\equiv y\pmod z\) 的一个方程,易见上面的方程组的最小正整数解就是 \(y\)

正确性证明

接下来我们来解决合并方程的问题,我们考虑如下两个方程:

\[\left\{\begin{matrix}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{matrix}\right.\]

我们根据第一个式子可以写出 \(x\) 的通解 \(x=a_1+m_1\times k\) 其中 \(k\) 为任意整数,我们将这个通解带入第二个式子就可以得到 \(a_1+m_1\times k\equiv a_2\pmod {m_2}\) 我们移一下项就可以得到 \(m_1\times k\equiv a_2-a_1\pmod {m_2}\),这就是上面的方程组合并后的结果。

而这个方程有解的充要条件是 \(\gcd(m_1,m_2)\mid a_2-a_1\),这个其实就是裴蜀定理,这里不再概述。

我们继续讲,我们得到这个充要条件后我们可以判断这个方程是否有解,如果有解我们就继续进行接下来的操作。

我们设 \(d=\gcd(m_1,m_2)\),然后将我们合并的方程变换一下就是:

\[\frac{m_1\times k}{d}\equiv \frac{a_2-a_1}{d}\pmod {\frac{m_2}{d}} \]

然后,我们设 \(m_1'=\frac{m_1}{d},c=\frac{a_2-a_1}{d},m_2'=\frac{m_2}{d}\) 于是我们就有:

\[m_1'\times k\equiv c\pmod {m_2'} \]

注意到此时 \(m_1',m_2'\) 互质,所以 \(m_1'\) 在模 \(m_2'\) 的意义下存在乘法逆元,我们可以使用扩展欧几里得算法来求出逆元,即求出整数 \(inv\) 使得 \(m_1'\times inv\equiv 1\pmod {m_2'}\),所以我们继续将这个方程变换就变成了:

\[k\equiv c\times inv\pmod {m_2'} \]

如果我们记 \(k_0=c\times inv\)\(k\) 的通解为 \(k_0+m_2'\times t\) 其中 \(t\) 为任意整数。

然后我们将这个 \(k\) 带回一开始的式子就可以得出:

\[\begin{aligned} x&=a_1+m_1\times(k_0+m_2'\times t)\\ &=(a_1+m_1\times k_0)+(m_1\times m_2')\times t\\ &=(a_1+m_1\times k_0)+\frac{m_1\times m_2}{d}\times t\\ &=(a_1+m_1\times k_0)+\mathrm{lcm}(m_1,m_2)\times t\end{aligned}\]

我们设 \(x_0=a_1+m_1\times k_0,L=\mathrm{lcm}(m_1,m_2)\) 所以我们就愉快地得出了:

\[\left\{\begin{matrix}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\end{matrix}\right.\Longleftrightarrow x\equiv x_0\pmod L\]

于是,我们完成了合并方程的使命!

最后其实就是一个递推的过程我们一次合并前 \(2\) 个方程,最后就能得到答案!

代码实现

#include<bits/stdc++.h>
#define LL __int128
#define R register
using namespace std;
namespace fastIO{char *p1,*p2,buf[100000];#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)inline void read(LL&n){LL x=0,f=1;char ch=nc();while(ch<48||ch>57){if(ch=='-'){f=-1;}ch=nc();}while(ch>=48&&ch<=57){x=(x<<3)+(x<<1)+(ch^48),ch=nc();}n=x*f;}inline void read(string&s){s="";char ch=nc();while(ch==' '||ch=='\n'){ch=nc();}while(ch!=' '&&ch!='\n'){s+=ch,ch=nc();}}inline void read(char&ch){ch=nc();while(ch==' '||ch=='\n'){ch=nc();}}inline void write(LL x){if(x<0){putchar('-'),x=-x;}if(x>9){write(x/10);}putchar(x%10+'0');return;}inline void write(const string&s){for(R LL i=0;i<(int)s.size();i++){putchar(s[i]);}}inline void write(const char&c){putchar(c);}
}using namespace fastIO;
inline LL mul(LL a,LL b,const LL&mod){a=(a%mod+mod)%mod; b=(b%mod+mod)%mod;LL res=0;while(b){if(b&1)res=(res+a)%mod;a=(a+a)%mod;b>>=1;}return res;
}
void exgcd(LL a,LL b,LL&x,LL&y){if(b==0){x=1;y=0;}else{exgcd(b,a%b,y,x);y-=x*(a/b);}
}
LL inv_mod(LL a,LL m){LL x,y;exgcd(a,m,x,y);return (x%m+m)%m;
}
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;
}
LL n,a[100005],b[100005];
signed main(){read(n);for(int i=0;i<n;i++){read(a[i]);read(b[i]);}LL a0=a[0];LL b0=(b[0]%a0+a0)%a0;for(int i=1;i<n;i++){LL ai=a[i];LL bi=(b[i]%ai+ai)%ai;LL d=gcd(a0,ai);LL dif=bi-b0;LL a0_=a0/d;LL ai_=ai/d;LL dif_=dif/d;LL c=(dif_%ai_+ai_)%ai_;LL inv=inv_mod(a0_,ai_);LL t0=mul(inv,c,ai_);LL a0__=(a0/d)*ai;LL mod__=a0__;LL p=mul(a0,t0,mod__);LL b0__=(b0+p)%mod__;a0=mod__;b0=b0__;}write(b0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小杰深度学习(five)——正则化、神经网络的过拟合解决专业的方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年小程序商城开发公司推荐排行榜

文章摘要 2025年,小程序商城行业持续高速发展,随着数字化转型加速,中小企业对高效、可靠的互联网营销工具需求激增。小程序商城作为核心入口,帮助企业快速触达用户,提升销售效率。本文基于市场调研和用户反馈,整…

2025年pp管规格源头厂家权威推荐榜单:pp管阀件/塑料pp管/pp管连接源头厂家精选

在化工、环保、水处理等领域,PP管因其卓越的耐腐蚀性和使用寿命,已成为流体输送系统的核心组件。2024年全球PP管市场规模已达数千亿元,市场需求持续增长。 选择合适的PP管规格源头厂家,不仅关乎管道系统的质量,更…

IP 欺骗攻击?

僵尸网络(Botnet):规模化攻击的傀儡军团 技术架构与控制机制 僵尸网络是通过传播恶意软件(Bot)感染大量主机,形成由攻击者远程控制的分布式网络。其核心组件包括: 感染机制漏洞利用:利用未修复的系统漏洞(如永…

快乐的CSP-S前最后一场赛拟模

1 给出 \(n,m,c\) 和长度分别为 \(n,m\) 的序列 \(a,b\),有 \(t\) 次询问,每次询问给出 \(p,q\),求 \(\sum_{i=1} ^n \sum_{j=1} ^m [i\times p+j\times q=c]\times a_i \times b_j\)。 简单根号分治,可以很简单的…

2025年自酿啤酒设备订制厂家权威推荐榜单:自酿鲜啤酒设备/小型自酿啤酒设备/酿啤酒设备源头厂家精选

在精酿文化蓬勃发展的今天,一套专业的自酿啤酒设备不仅是生产工具,更是奠定品牌风味的基石。 随着消费升级和精酿文化的普及,中国定制啤酒设备市场正迎来快速增长期。精酿啤酒设备已占据整体啤酒设备市场的约30%份额…

2025 年绿色环保板材源头厂家最新推荐榜:聚焦生态与装修板材,标杆企业深度测评

引言 板材作为家居装饰核心材料,其环保性与品质直接关乎居住健康,然而当前市场源头厂家良莠不齐,劣质板材释放的有害物质屡成健康隐患。消费者面临严重信息不对称,既难辨别 FSC、EPA 等权威认证的真实价值,也无从…

2025年市场上微信小程序服务商排名前十推荐

文章摘要 2025年微信小程序服务市场持续高速发展,中小型企业数字化转型需求激增。本文基于行业调研数据,为您推荐十家优质微信小程序服务商,并提供详细对比分析。文末附有免费咨询表单,助您快速匹配最适合的服务商…

RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

瑞芯微RK3576 AIoT处理器处理器凭借其卓越的多屏异显与8路摄像头接入能力,为机器人领域带来革新。米尔电子MYD-LR3576开发板实测数据显示,在高负载下CPU占用仅34%,完美实现多路视觉任务并行处理,是服务机器人开发的…

2025年墓碑制造商权威推荐榜单:石材墓碑/汉白玉墓碑/手工雕刻石碑源头厂家精选

2024年全球墓碑市场规模已达到803.9亿元人民币,预计到2030年将增长至1050.95亿元,期间年复合增长率预估为4.57%。这一数据反映了墓碑行业在传承文化与满足社会需求方面的持续重要性。 在中国传统文化与现代工艺不断融…

JVM内存启动问题

---------------------------------------------------------------------------------------springboot jar 启动命令 java -jar java -jar 是启动 Spring Boot JAR 包最基础的命令,通过它可以直接运行打包好的 Spri…

查找表(LUT)基础知识(2025.10.29)

实例:使用查找表实现1bit全加器 1bit全加器的真值表为A B Ci S Co0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 01 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1A,B为被加数 Ci为前级进位 S为本级相加结果 Co为本级进位 利用最小项表示…

国标GB28181算法算力平台EasyGBS视频实时监控系统打造城市环境监控全场景解决方案

国标GB28181算法算力平台EasyGBS视频实时监控系统打造城市环境监控全场景解决方案一、方案概述 在环境问题备受关注的背景下,传统人工巡查与单点数据采集的监控方式,因动态响应慢、数据整合与可视化不足,已无法满足…

报纸阅读神器:支持多日期多版面自由切换,本地保存更方便

软件介绍 该软件整合了目前市面上的一些报纸阅读资源,方便浏览,版权归报社所有。 使用方法 选择不同的报纸、日期、版面,报纸会自动加载对应的版面(加载按钮似乎没用上)。 默认是在线浏览的,如果取消,会把报纸保…

VR环保教育展厅方案:垃圾分类+节约用水+低碳出行

环境保护需要全社会的共同参与,而公众环保意识的提升是关键的一步。传统的环保教育往往依赖于课堂教学、展览和宣传活动,但这些方式对一些人群尤其是年轻一代的吸引力有限。VR技术的应用,能够打破这些局限,提供一种…

国标GB28181算法算力平台EasyGBS的“算法仓”如何重构视频监控价值

国标GB28181算法算力平台EasyGBS的“算法仓”如何重构视频监控价值在视频监控全面覆盖的今天,如何从海量的、孤立的视频流中实时发现价值信息,是安防领域的核心痛点。本文深入解析基于国标GB28181协议的国标GB28181算…

2025年叠螺式污泥脱水机品牌权威推荐榜单:叠螺污泥脱水机/带式污泥脱水机/带式浓缩污泥脱水机源头厂家精选

叠螺式污泥脱水机作为市政污水处理、工业废水处理等领域的核心固液分离设备,其性能直接关系到污泥处理效果和运营成本。随着国家环保政策的持续收紧和污泥处理需求的增长,叠螺式污泥脱水机市场规模年均增长率稳定在1…

25.10.29

25.10.29昨天还算完成了任务,Redis 收了尾,题也刷了。 晚上准备了一下期中考试,上午期中考试。 今天要做的 继续 BFS 快速看微服务基础知识 近期要做的 MySQL 尽量不听课,直接看文档和面经 考虑了一下,先做个相对…

样式资源键-独立的控件库

自定义样式,供其他项目调用 第一步创建一个控件库项目 第二步创建一个资源键类using System.Windows; namespace SharedStyles;public static class ButtonKeys {// 主按钮样式资源键(强类型定义)public static Com…

频谱分析仪的应用范围与技术解析

频谱分析仪集信号分析、网络测试与EMC评估于一体,具备高动态范围、多频段覆盖及扩展测量功能,广泛应用于通信、电磁兼容及射频元件测试频谱分析仪作为射频测试领域的核心仪器,其功能远不止于基础的频谱观测。现代频…