扩展欧几里得算法 - Exgcd
前置 - 欧几里得算法
- 欧几里得算法是一种求
的算法,又名辗转相除法,即为:
证明:
令
, ( )。
所以
为 的公因数。 接着:
设
,我们还是可以像之前一样得到以下式子
。
左边式子显然为整数
也为整数,即 ,所以 的公约数也是 的公约数。 既然两式公约数都是相同的,那么最大公约数也会相同。
所以得证。
时间复杂度:
若
若
所以,每次
扩展欧几里得 - Exented gcd
主要用来求解线性同余方程和不定方程(这两个是等价的)
0. 特殊的不定方程
该算法用于求解形如:
证明:
一定有解 由于
(辗转相除) 所以有方程
所以:
所以
依此类推,当
时,一定有 ,而 有无数种解。 所以,
一定有解。
由上过程,可写出求解一组
void exgcd(int a, int b, int& x, int& y) {
if (b == 0) {
x = 1, y = 0;
return;
}
exgcd(b, a % b, y, x);
y -= a / b * x;
}
1.求通常不定方程
设一个不定方程为:
该方程有解的充要条件
证明:
设方程
。 两边同时乘以
,那么方程就变为:
由于
定义为整数,所以 为整数,所以 一定整除 。
于是乎,设
2. 通解
对于不定方程
, 是 的一组解,可以用 Exgcd 求出。
证明:
代回原式:
展开:
所以成立,得证。
分类:
知识总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探