扩展中国剩余定理(EXCRT)

【模板】扩展中国剩余定理(EXCRT) 传送门:洛谷:p4777 中国剩余定理(CRT) ⎧⎩⎨⎪⎪⎪⎪⎪⎪xxx≡≡⋮≡a1(modp1)a2(modp2)an(modpn){x≡a1(modp1)x≡a2(modp2)⋮x≡an(modpn)\begin{cases} x &\equiv& a_1 \pmod {p_1} \\ x &\equiv& a_2 \pmod {p_2} \\ &\vdots& \\ x &\e... 阅读详情

扩展中国剩余定理(EXCRT)

中国剩余定理可以解形如下面的一元线性同余方程组:
{ans≡x1(moda1)ans≡x2(moda2)ans≡x3(moda3)...ans≡xn(modan) \left\{\begin{matrix} ans\equiv x_1\pmod{a_1} \\ ans\equiv x_2\pmod{a_2} \\ ans\equiv x_3\pmod{a_3}\\ .\\ .\\ .\\ ans\equiv x_n\pmod{a_n} \end{matrix}\right.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧​ans≡x1​(moda1​)ans≡x2​(moda2​)ans≡x3​(moda3​)...ans≡xn​(modan​)​
其中a1,a2,a3…an两两互素。

如果a1,a2,a3…an不两两互素时,就不能利用中国剩余定理去解上述方程组了。因为不存在另外n-1个ai的乘积关于剩下一个数的逆元。

我们先考虑将如下方程组合并成一个方程
{ans≡x1(moda1)ans≡x2(moda2)\left\{\begin{matrix} ans\equiv x_1\pmod{a_1} \\ ans\equiv x_2\pmod{a_2} \\ \end{matrix}\right.{ans≡x1​(moda1​)ans≡x2​(moda2​)​

该方程存在唯一解ans,使得ans=m1a1+x1=m2a2+x2ans=m_1a_1+x_1=m_2a_2+x_2ans=m1​a1​+x1​=m2​a2​+x2​成立。
所以有方程
m1a1+x1=m2a2+x2m_1a_1+x_1=m_2a_2+x_2m1​a1​+x1​=m2​a2​+x2​即
m1a1−m2a2=x2−x1m_1a_1-m_2a_2=x_2-x_1m1​a1​−m2​a2​=x2​−x1​
成立。
如果有gcd(a1,a2)∣(x2−x1)gcd(a_1,a_2)|(x_2-x_1)gcd(a1​,a2​)∣(x2​−x1​),我们则可以通过扩展欧几里得算法求得整数解。
否则无解。

在求得一组解(m1,m2)后,可以将上述方程组转化为以下方程:
ans≡X(modlcm(a1,a2))ans\equiv X\pmod {lcm(a_1,a_2)}ans≡X(modlcm(a1​,a2​))
其中X=m1a1+b1=m2a2+b2X=m_1a_1+b_1=m_2a_2+b_2X=m1​a1​+b1​=m2​a2​+b2​。

显然X是上述方程组的一个特解。
设M=lcm(a1,a2)M=lcm(a_1,a_2)M=lcm(a1​,a2​),那么通解为X′=kM+XX'=kM+XX′=kM+X

可以将上述结论推广至由k个同余方程组成的一元线性同余方程组。

算法流程如下:
设xk为前k个一元线性同余方程合并后的一个特解,xk+1为第k+1个同余方程的特解。ak为前k个一元线性同余方程合并后的模数,即lcm(a1,a2,...,ak)lcm(a1,a2,...,a_k)lcm(a1,a2,...,ak​)。ak+1为第k+1个同余方程的模数。
for k=1 to n:for\space k=1\space to\space n:for k=1 to n:
1、解方程akx−ak+1y=gcd(ak,ak+1)a_kx-a_{k+1}y=gcd(a_k,a_{k+1})ak​x−ak+1​y=gcd(ak​,ak+1​)。
2、若gcd(ak,ak+1)∣(xk+1−xk)gcd(a_k,a_{k+1})|(x_{k+1}-x_k)gcd(ak​,ak+1​)∣(xk+1​−xk​),则可以求出akx−ak+1y=xk+1−xka_kx-a_{k+1}y=x_{k+1}-x_kak​x−ak+1​y=xk+1​−xk​的一个特解x′=xk+1−xkgcd(ak,ak+1)xx'=\frac{x_{k+1}-x_k}{gcd(a_k,a_{k+1})}xx′=gcd(ak​,ak+1​)xk+1​−xk​​x;否则无解,算法结束。
3、合并前k+1个方程的后一个特解为xk+1=akx′+xkx_{k+1}=a_kx'+x_kxk+1​=ak​x′+xk​,
4、合并前k+1个方程的后的模数为lcm(ak,ak+1)lcm(a_k,a_{k+1})lcm(ak​,ak+1​)

知道对于方程ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b),由一对特解(x,y),那么由通解X,Y,X=k⋅bgcd(a,b)+x,Y=k⋅agcd(a,b)+yX=k\cdot\frac{b}{gcd(a,b)}+x,Y=k\cdot\frac{a}{gcd(a,b)}+yX=k⋅gcd(a,b)b​+x,Y=k⋅gcd(a,b)a​+y。
在上述算法流程中,如果xk+1−xkgcd(ak,ak+1)\frac{x_{k+1}-x_k}{gcd(a_k,a_{k+1})}gcd(ak​,ak+1​)xk+1​−xk​​较大,直接与x相乘可能会造成溢出。我们可以把x’限制在[0ak+1gcd(ak,ak+1)][0\frac{a_{k+1}}{gcd(a_k,a_{k+1})}][0gcd(ak​,ak+1​)ak+1​​]中,通过慢速乘法(类似与快速幂)防止数据溢出。

模板代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{
	if(!b){
		x=1;y=0;d=a;return ;
	}
	else{
		exgcd(b,a%b,d,y,x);y-=(a/b)*x;
	}
}
ll mul(ll a,ll b,ll mod)
{
	ll ans=0;
	while(b)
	{
		if(b&1)ans=(ans+a)%mod;
		a=(a+a)%mod;
		b>>=1;
	}
	return ans;
}
int main(void)
{
	int n;
	scanf("%d",&n);
	ll b1=0,a1=1;
	ll b2,a2;
	while(n--)
	{
		scanf("%lld%lld",&a2,&b2);
		ll x,y,d,t;//求解x*a1+b1=b2(mod a2) 
		t=((b2-b1)%a2+a2)%a2;//x*a1=b2-b1(mod a2)
		exgcd(a1,a2,d,x,y);//求解x*a1+y*a2=gcd(a1,a2) 
		ll g=a2/d;
		x=mul(x,t/d,g);
		b1+=x*a1;
		a1*=a2/d;//lcm
		b1=(b1%a1+a1)%a1;
	}
	printf("%lld\n",b1);
}
【代码超详解】洛谷 P4777 【模板】扩展中国剩余定理(EXCRT) 一、题目描述 二、算法分析说明与代码编写指导 三、AC 代码 #include<cstdio> #pragma warning(disable:4996) using namespace std; template<class _Ty> _Ty gcd(const _Ty& a, const _Ty& b) {//a, b > 0 return ... 阅读详情

相关推荐

海鸥派OpenEuler开发板实战:从烧写到SSH连接的完整指南

本文提供海鸥派OpenEuler开发板从开箱到SSH远程连接的完整实战指南。详细介绍了基于海思SD3403/SS928芯片的算力开发板系统烧写、存储扩容、网络配置等关键步骤,帮助开发者快速上手这款AI边缘计算设备,并实现高效的远程开发与管理。

ruby5的博客 1121

扩展中国剩余定理(ExCRT)

详解扩展中国剩余定理。

wanglianda2007的博客 2081

WIFI基础入门--802.11g--增强速率物理层ERP--15

WIFI基础入门--802.11--增强速率物理层--191.802.11g的组件保护机制 1.802.11g的组件 802.11g其实是将好几种物理层规范合而为一。虽然统称为增强速率物理层(Extended Rate PHY简称ERP),但是实际上ERP有好几种不同的方式: ERP-DSSS与ERP-CCK 这两种模式向下兼容于原始直接序列规范(1Mbps与2Mbps),以及所提到的802.11...

香蕉一号 4617

【算法学习笔记】37:扩展中国剩余定理(EXCRT)求解任意线性同余方程组

中国剩余定理仅适用于模数m1​...mn​两两互质的情况,如果没有这个限制条件则不能使用。下面进行一般情况的解法推导,注意虽然叫扩展中国剩余定理(EXCRT),实际上只是扩宽了中国剩余定理(CRT)的求解限制,解法和原理上和CRT完全没啥关系。

大桔骑士的学习笔记 1000

GEM5教程--gem5开始之旅(一)

GEM5系列教程--gem5开始之旅一、建立GEM5 GEM5模拟器是一个用于计算机系统结构研究的模块化平台,包含系统级别的结构以及处理器的微体系结构。读者若想详细的了解,请查看其官方文档GEM5文档 读者如果想要入门GEM5的话,可以参考Learning_GEM5这个网站,这里面有较为详细的教程,可以带读者从入门到精通。小编我对GEM5的入门学习也是从这个Learning_GEM5这个网站学习的...

qq_43381135的博客 3万+

2026年GESP3月认证C++五级真题解析

因为要合并成升序数组,所以当A[i]小于等于B[j]时,取A[i],否则取B[j]。当a[i]>a[j]时,左边数组中从i到m的所有元素都大于a[j],因此逆序对数量增加m-i+1。给定一个包含n个互不相同的正整数的数组A与一个包含m个互不相同的正整数的数组B,请你帮忙计算有多少个数在数组A与数组B中均出现。下面代码实现两个整数除法,其中被除数为一个“大整数”,用字符串表示,除数是一个小整数,用int表示,则横线处应该填写()。且a[i] > a[j],则a[i]和a[j]是一个逆序对。

lan_in的博客 118

中国剩余定理(CRT) && 扩展中国剩余定理(EX_CRT)

中国剩余定理(解决模数互质的同余方程组)   在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。 具体解法分三步: 找到三个数:从3和5的公倍数中找出被7除余2的最小数20,从3和7的公倍数中找出被5除余3的最小数63,最后从...

FIVE 2707

uniapp - H5人脸识别认证与活体检测功能(纯前端免费方案+微信sdk人脸识别)完整源码,微信公众号网页/h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp源码

uniapp实现人脸认证,uniAPP h5手机拍照+人脸识别,免费人脸识别插件,前端人脸识别解决方案,uniapp H5人脸识别带前后摄像头,人脸识别在H5页面进行采集,微信公众号H5人脸核身,H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,uniapp人脸监测,uniapp人脸生物监测,使用uniapp开发H5人脸采集功能/人脸识别功能,uniapp项目—h5端人脸采集功能实现,uniapp vue3人脸核身,H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信

🏆 前端领域优质创作者 3809

【算法基础篇】(五十)扩展中国剩余定理(EXCRT)深度精讲:突破模数互质限制

本文系统介绍了扩展中国剩余定理(EXCRT)的原理与实现。EXCRT突破了中国剩余定理(CRT)要求模数互质的限制,通过迭代合并方程的方式求解任意线性同余方程组。文章详细讲解了EXCRT的数学推导过程、核心工具(扩展欧几里得算法和快速乘)、完整C++实现,并分析了两个典型例题(洛谷P4777模板题和P4774屠龙勇士题)。针对常见误区提供了避坑指南,对比了EXCRT与CRT的特点和应用场景。EXCRT是解决非互质模数方程组的有效工具,在算法竞赛和数论问题中具有重要应用价值。

2301_79248256的博客 1736

EMC设计技巧及经验总结3:TVS的使用

Way back in undergrad circuits class(回到本科时的电路课程), our TA(助教) loved to give uslittle “black box” circuits. We’d measure the voltage and current characteristics, then have to determine what compone

snmplink的博客 2410

FreeRTOS全攻略:从入门到精通

本文聚焦 FreeRTOS,从基础概念出发,阐述其开源、轻量级等优势。着重介绍 FreeRTOS 入门知识,涵盖内存管理、任务操作、同步互斥机制等核心内容。其中,空闲任务与钩子函数保障系统基础运行与功能扩展;队列、信号量、互斥锁和事件组等机制,分别从数据传递、资源访问控制、优先级问题解决及多任务同步等方面,为开发者提供高效的任务间协作与资源管理方案,助力开发者掌握 FreeRTOS 核心技术,为嵌入式项目开发筑牢基础。

邓邓子的博客 6357

第三十章 数论——扩展中国剩余定理

详细讲解扩展中国剩余定理的推导和步骤,帮助你彻底掌握该算法的原理并熟练写出代码模板。

Turing_Sheep的博客 1609

vue - 网站接入微信扫码登录功能详细教程,完整详细流程及完整功能示例源代码(附常见问题的解决方案与二维码样式修改方案)

vue.js项目植入微信登录,vue网页项目怎么做微信扫码登录,VUE项目中的微信扫码登录,VUE中最简单的js调用微信扫一扫功能,vue:如何设计网页的微信扫码登录功能,微信扫码功能官方文档,通过vue方式实现二维码扫码功能,vue调用微信扫码,vue H5 调用微信扫描二维码,Vue前端实现微信扫码登录,vue-wxlogin 微信授权登录组件,网站引入的微信登录框如何修改宽高或其他样式,wxlogin 组件插件怎么改变宽高,vue-wxlogin组件怎么自定义样式,微信网页授权,vue调用微信JSDK

✅ 精选推荐文章 6364

扩展中国剩余定理 EXCRT

拓展中国剩余定理 EXCRT 题目描述 给定nnn个同余式,m1,m2...,mnm_1,m_2...,m_nm1​,m2​...,mn​不一定互质 问,满足上述同余式最小的xxx是多少 解决方法 显然不能再用CRT的方法来求解了 那么我们考虑逐一进行求解 假设当前已经求出前k−1k-1k−1个方程组的解,记为xxx 且有M=∏i=1k−1miM=\prod_{i=1}^{k-1}m_iM=∏i...

Daniel__d的博客 301

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

中国剩余定理(CRT)及其扩展(EXCRT)详解

#中国剩余定理(CRT)及其扩展(EXCRT)详解 博客园食用效果更佳 问题背景   孙子定理是中国古代求解一次同余式方程组的方法。是数论中一个重要定理。又称中国余数定理。一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下:   有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文

ailanxier的博客 1216

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

excrt(扩展中国剩余定理)

EXCRT(扩展中国剩余定理) 拖更了 此时的模数不一定两两互质,导致了不能直接像之前那样只满足其中一个模数然后依次累加。 所以就只能换其他思路 /* 不妨来看其中两个条件满足 x=a1+m1*x1 x=a2+m2*x2 然后直接变换就得到m1*x1-m2*x2=a2-a1 要使得x尽量的小,那么x1和x2都要尽量的小 根据裴蜀定理 ax+by=c有整数解的充要条件就是(a,b)|c 也就是c是gcd(a,b)的整数倍数 所以基于此 设g

qq_45744856的博客 1464

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

本文介绍了如何利用扩展中国剩余定理(EXCRT)解决非互质模数的同余方程组问题。通过将两个同余方程转化为不定方程,使用扩展欧几里得算法求出通解,最终合并为单一方程。代码实现展示了这一过程,关键步骤包括求解公约数、调整解的范围,以及逐步合并所有方程。该方法有效解决了传统中国剩余定理无法处理非互质模数的情况,最终输出最小非负整数解。

Benny_250的博客 713

【luogu4777】扩展中国剩余定理(EXCRT)[数论 扩展中国剩余定理]

P4777 【模板】扩展中国剩余定理(EXCRT) 我的扩中终于出生了!!!!!! 历经磨难 开始没看题 这个题居然是求 x ≡ b (mod a) 啊啊啊啊啊啊就一直输出无解 然后又把判断无解的 if(c%gcd) return -1; 打成了if(!c%gcd) return -1; 而且还有几个地方忘了开long long 都这样了我都还有6昏 tql具体是酱紫: 就是用扩欧...

weixin_30256901的博客 157

Marching Orders(扩展中国剩余定理EXCRT)

摘要:Dean Bob Roberts采用随机算法确定教授游行顺序,方法是从字母排序列表中按m mod n选取第一个人,随后缩短列表并重复该过程。给定一个游行顺序,需判断是否存在整数m能生成该顺序。若存在,输出最小的m;否则输出NO。该问题转化为解线性同余方程组,通过扩展欧几里得和CRT算法求解。样例输入6DFEACB对应输出YES 39,而7DFEGACB则输出NO。

2401_87622134的博客 890

【学习笔记】扩展中国剩余定理(EXCRT)

扩展中国剩余定理(EXCRT)

2503_91106447的博客 1150

【数学】一元一次同余方程组、中国剩余定理(CRT)与扩展中国剩余定理(exCRT)

讲解一元一次同余方程租的定义、中国剩余定理与扩展中国剩余定理的基础

OI博客 1418

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

扩展中国剩余定理 模板

2403_87530627的博客 1006

扩展中国剩余定理 (ExCRT) 学习笔记

扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\pmod {m_1}\\ x\equiv a_2\pmod {m_2}\\ ... ...\\ x\equiv a_n\pmod {m_n}\\ \end{cases}\] 的解\(x\)。...

weixin_30273501的博客 226
上一篇: 二次剩余与Cipolla算法
下一篇: NOI 2018 屠龙勇士(exCRT)
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值