浅记线性同余方程(组)

news/2025/10/29 16:47:03/文章来源:https://www.cnblogs.com/rp-plus-plus/p/19174876

线性同余方程

定义

线性同余方程就是形如 \(ax\equiv b\pmod m\) 其中 \(a,b,m\) 是给定的整数。

解法

由同余的性质可知 \(m\mid ax-b\)\(ax-b=km\) 其中 \(k\in \mathbb{Z}\)

如果我们设 \(k=-y\) 的话,就有 \(ax+my=b\),发现了吗?其实这就是 Bézout 定理。

Bézout 定理我们可以得到,这个同余方程有解当且仅当 \(\gcd(a,m)\mid b\)

我们考虑在有解的情况下使用扩展欧几里得算法先求解出 \(ax+my=\gcd(a,m)\) 的一组特解 \(\left\{\begin{matrix}x=x_0\\y=y_0\end{matrix}\right.\),然后呢,我们就可以得到 \(x=\frac{x_0\yimes b}{\gcd(a,m)}\) 就是原方程的一组解。

关于扩展欧几里得算法的说明

内容

我们考虑不定方程 \(ax+by=\gcd(a,b)\) 的一组特解,我们可以采用递归的方法来求解,实际上这也就是扩展欧几里得算法:

  1. 显然当 \(b=0\) 时,有 \(\left\{\begin{matrix}x=1\\y=0\end{matrix}\right.\) 满足条件。
  2. \(b\ne 0\) 时,我们根据欧几里得算法有 \(\gcd(a,b)=\gcd(b,a\bmod b)\) 于是,我们就有 \((a\bmod b)y+bx=\gcd(b,a\bmod b)\) 又由于 \((a\bmod b)y+bx=\left(a-b\times\lfloor\frac{a}{b}\rfloor\right)\times y+bx\)\(\operatorname{RHS}\) 展开,合并同类项后有 \((a\bmod b)y+bx=ay+b\times \left(x-\lfloor\frac{a}{b}\rfloor y\right)\) 于是,我们令 \(x_0=y,y_0=x-\lfloor \frac{a}{b}\rfloor y\) 就有 \(ax_0+by_0=\gcd(a,b)\)
代码实现

根据上述内容,我们可以打出扩展欧几里得算法的代码:

int exgcd(int a,int b,int&x,int&y){if(b==0){x=1;y=0;return a;}int d=exgcd(b,a%b,x,y);int z=x;x=y;y=z-z*y;return d;
}
功能介绍

以上函数的返回值为 \(\gcd(a,b)\),注意到参数 \(x,y\) 均在前面加上了取地址符,表示在函数中可以改变 xy 的值,而函数运行完成后 xy 所保存的值就是 \(ax+by=\gcd(a,b)\) 的一组特解。

一道模板题

洛谷 P1082:

这道题目就是模板题,方程可以写成 \(ax+by=1\) 的形式,于是我们使用扩展欧几里得算法,可以求出特解 \(x_0\) 然后 \(x_0\)\bmod b 就是原方程的最小正整数解了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int exgcd(int a,int b,int&x,int&y){if(b==0){x=1;y=0;return a;}int d=exgcd(b,a%b,x,y);int z=x;x=y;y=z-(a/b)*y;return d;
}
signed main(){cin>>a>>b;int x,y;exgcd(a,b,x,y);cout<<(x%b+b)%b;return 0;
}

线性同余方程组

作者太懒了,这里先讲解更加宽泛的扩展中国剩余定理吧,等以后再讲解特殊的中国剩余定理,顺便宣传一下博客:link。

问题简述

给定一个 \(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;
}

一些例题

如果有不会的可以回复作者!

  • 洛谷 P5655。
  • 洛谷 P2480。

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

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

相关文章

Cookie登录机制

1. 核心逻辑:Cookie存“身份标识(Session ID)”,客户端带标识请求,服务器验标识免重复登录。 2. 3步流程: 登录:输账号密码,服务器生成唯一Session ID并自己保存。 发Cookie:服务器用 Set-Cookie 把ID发给客户…

数据结构使用技巧

1. 导论:剖析问题的维度 在深入探讨具体技巧之前,我们首先需要建立一个分析框架。任何数据结构问题,本质上都是在多维空间中对信息进行维护与查询。这些“维度”不仅包括数据本身的数值、坐标,也包括“时间”这一特…

2025密炼机设备推荐榜:大连华韩橡塑以技术创新与全球布局引领行业发展

在橡胶工业持续升级与技术迭代的背景下,密炼机作为橡胶混炼的核心设备,其性能优劣直接影响胶料质量、生产效率与能源消耗。2025年,随着全球橡胶机械行业集中度不断提高,密炼机技术正朝着智能化、高效化与绿色化方向…

系统异步处理机制流程总结

1. 整体流程当用户调用导出接口(如exportOrdAdmin)时,系统会创建一个事件实例(SdEventInstBean),并将该事件实例保存到数据库中,状态设置为待处理(如"S0N")调用eventInstService.expApiWithDownloa…

2025年国内小程序开发服务商排行榜Top10推荐

文章摘要 随着数字化转型加速,2025年小程序开发服务市场呈现爆发式增长,中小企业对互联网营销工具需求激增。本文基于行业数据、用户口碑和技术实力,为您精选TOP10服务商,并提供详细对比分析。江苏云鼎大数据有限公…

2025年市场上小程序开发公司Top10推荐:江苏云鼎大数据领跑行业

摘要 随着数字化转型加速,2025年小程序开发市场呈现爆发式增长,中小企业对互联网营销工具需求激增。本文基于行业数据和技术实力评估,为您精选市场上最具竞争力的小程序开发服务商,并提供客观的推荐表单供参考选择…

2025年市场上小程序开发公司口碑排行榜单

文章摘要 随着数字化转型加速,2025年小程序开发行业迎来爆发式增长,中小企业对互联网营销工具需求激增。本文基于技术实力、服务口碑、案例成果等维度,深度评测市场上主流小程序开发服务商,为企業选择提供参考依据…

2025年市场上小程序开发公司Top10权威推荐

摘要 随着数字化转型加速,2025年小程序开发行业呈现爆发式增长,中小企业对高效、可靠的开发服务需求激增。本文基于行业数据和用户反馈,为您精选前十名小程序开发公司,并提供详细排名和比较,表单数据供企业参考选…

USB图像采集卡:连接现实与数字世界的便捷桥梁

在当今这个视觉信息爆炸的时代,将高质量的图像和视频从各种设备传输到电脑中进行处理、录制或直播,已成为内容创作者、工程师、医疗从业者和教育工作者等众多群体的核心需求。在这个过程中,一个看似小巧却至关重要的…

2025上海单位/小区/商场/办公楼/工厂/住宅/保洁公司服务推荐榜:臣峰环境以场景化定制能力引领行业新发展

在现代化都市运营体系中,专业保洁服务已从基础清洁升级为维护商业形象、保障生产环境的关键环节。上海作为国际化大都市,保洁服务市场需求持续增长,服务品质参差不齐的现状使得采购决策面临挑战。2025年,随着商业楼…

基于MATLAB的TV、PM和ROF模型的实现代码

基于MATLAB的TV(总变差)、PM(Perona-Malik)和ROF(Rudin-Osher-Fatemi)模型的实现代码,包含图像去噪与重建功能一、TV模型(总变差去噪) 1. 代码 function denoised = TV_denoise(noisy_img, lambda, iter)% 输…

可传参数的3Decharts-gl省市级地图实现(点击具体的省份及可下钻到市级地图)--详细版本

可传参数的3Decharts-gl省市级地图实现(点击具体的省份及可下钻到市级地图)--详细版本echarts: 作为基础的可视化库,提供了强大的图表渲染和事件系统。echarts-gl: 关键的3D渲染扩展,它基于 WebGL,为 ECharts 提供…

danted服务无过滤多出口简单配置

logoutput: stderrinternal: 0.0.0.0 port = 1080external: 10.10.20.148external: 10.10.4.182external.rotation: same-samesocksmethod: noneuser.privileged: proxyuser.unprivileged: nobodyuser.libwrap: nobody…

2025灌装/大桶/桶装/纯净/瓶装/水处理设备推荐榜:青州路得自动化以科技创新引领行业升级

在水资源管理与环境保护日益受到重视的今天,水处理设备作为保障水质安全、提升用水效率的关键装备,其技术水平与可靠性愈发受到关注。2025年,随着智能化、自动化技术的深度应用,水处理行业正迎来新一轮技术革新。本…

都在说国产替代Oracle,那么OCP认证还值得考吗?

在数据库国产化加速推进的背景下,Oracle数据库市场占有率逐渐下降,那么OCP认证(Oracle Certified Professional)还值得考吗?事实上,短期看,国内仍有大量的企业在使用Oracle占有率较高,长期看,即使再下降Oracle在…

Affinity Photo 中文版:专业摄影师与创意者的正版图像编辑利器

在数字图像编辑领域,一款兼具速度、精度与强大功能的软件,是创意落地与专业工作的核心支撑。Affinity Photo 中文版作为屡获全球行业奖项的电脑照片编辑工具,凭借对专业需求的深度契合,已成为数百万摄影从业者、设…

2025年EVA再生膜厂商权威推荐榜单:EVA塑料膜/EVA超薄布/EVA再生布源头厂家精选

在绿色循环经济与“双碳”目标深入推进的背景下,EVA再生膜产业凭借其环保减碳、高性价比的特性,正成为塑料资源循环利用的关键领域。EVA(乙烯-醋酸乙烯酯共聚物)再生膜通过对EVA废料的回收、改性再造,广泛应用于鞋…

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

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

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