当前位置: 首页 > news >正文

扩展欧几里得(EXGCD)

基本内容

exgcd 通常用于求解形如 \(ax+by=gcd(a,b)\) 的一组整数解。

考虑有

\[ax+by=\gcd(a,b) \]

\[bx^{\prime}+(a\bmod b)y^{\prime}=\gcd(b,a\bmod b) \]

容易发现,如果我们可以用 \(x^{\prime},y^{\prime}\) 来表示 \(x,y\)。那么我们就可以一直向下递归直至 \(b=0\),此时我们发现显然有一组解\(x=1,y=0\)。再回溯回去就能求出原方程的一组解。

\[bx^{\prime}+(a\bmod b)y^{\prime} \]

\[=bx^{\prime}+(a-\lfloor\frac{a}{b}\rfloor\times b)y^{\prime} \]

\[=bx^{\prime}+ay^{\prime}-\lfloor\frac{a}{b}\rfloor by^{\prime} \]

\[=ay^{\prime}+b(x^{\prime}-\lfloor\frac{a}{b}\rfloor y^{\prime}) \]

由欧几里得定理得 \(\gcd(a,b)=\gcd(b,a\bmod b)\)

\(\therefore ay^{\prime}+b(x^{\prime}-\lfloor\frac{a}{b}\rfloor y^{\prime})=ax+by\)

因为 \(a=a,b=b\),所以可以令 \(x\)\(y^{\prime}\),令 \(y\)\(x^{\prime}-\lfloor\frac{a}{b}\rfloor y^{\prime}\).

最后依照这种类似欧几里得算法的做法进行递归,直至 \(b=0\) 时令 \(x=1,y=0\)即可。

代码如下。

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 t = x;x = y;y = t - (a / b) * y;
}

这样我们就可以的出一组解 \(x,y\).

我们发现 \(ax+by=ax+by+\frac{ab}{\gcd(a,b)}-\frac{ab}{\gcd(a,b)}=a(x+\frac{b}{\gcd(a,b)}) + b(y-\frac{a}{\gcd(a,b)})=\gcd(a,b)\).

所以可以令 \(x:=x+\frac{b}{\gcd(a,b)},y:=y-\frac{a}{\gcd(a,b)}\),方程仍然成立(同理可以令\(x:=x-\frac{b}{\gcd(a,b)},y:=y+\frac{a}{\gcd(a,b)}\))。

所以当我们使用上述操作得到一组解 \(x,y\) 后就可以再得到无穷多组解。

那么这无穷多组解的集合是否与原方程的整数解集相等呢?我发现不仅在网络上大部分题解/博客没有对这个问题进行证明,oi-wiki 上也没有进行证明,所以我在这里进行一下证明。

证明

(本证明思路来自 unordered)

\[ax+by=\gcd(a,b) \]

\[ax^{\prime}+by^{\prime}=gcd(a,b) \]

\[x=x^{\prime}-\frac{b}{\gcd(a,b)},y=y^{\prime}+\frac{a}{\gcd(a,b)} \]

不妨设 \(a>0,b>0\).

两式相减得 \(a(x-x^{\prime})=b(y^{\prime}-y)\).

不难发现上式等于 \(\operatorname{lcm}(a,b)\),记为 \(S\).

假设 \(\exists x_1\in (x,x^{\prime})\cap Z\) 使得 \(\exists y_1\in (y^{\prime},y)\cap Z\) 满足 \(ax_1+by_1=\gcd(a,b)\).

\(a(x-x_1)=b(y-y_1)\).

不难发现上式为 \(\operatorname{lcm}(a,b)\) 的倍数且小于 \(S\)

与题设矛盾。

故由 \((x,y)\) 得出的 \((x^{\prime},y^{\prime})\) 能遍历原方程的整个整数解集。

http://www.jsqmd.com/news/482380/

相关文章:

  • 征程 6X Camera 接入数据评估
  • Eclipse 工作空间详解
  • 现在是 cli api 的春天时代,做 agent 想要的软件才会活下去
  • 中国电建集团华东院设计岗离职率高吗?
  • Swift 字符
  • 最大矩形面积 (赛博朋克版) —— 单调栈经典两次遍历法
  • 【Iced】stream.rs文件
  • ⚽⊔☺
  • Bootstrap5 图像形状
  • 057基于web的可追溯果蔬生产过程的管理系统-springboot+vue
  • 刚入行Java如何提升竞争力?
  • LLM 算法岗 | 八股题目 代码手撕 题目汇总与解析
  • ionic 模态窗口详解
  • 笔记3 - i
  • 大厂面试真题汇总(2026版)
  • Java程序员面试前请多刷题!
  • 二手交易平台毕业论文+PPT(附源代码+演示视频)
  • 深入解析观察者模式:从核心原理到现代框架中的高级实践
  • Redux - redux-saga中takeLates的作用
  • OpenClaw安全防护:从威胁认知到工程化加固
  • opencv中,把图片变成灰度图有什么用
  • AI驱动的8款工具能高效简化论文写作,自动完成目录生成与内容结构调整
  • web课堂笔记
  • 通过8款智能工具,论文写作更高效,自动生成目录并优化逻辑结构
  • PAT 乙级 1108
  • 部分OtterCTF2018
  • PAT 乙级 1103
  • 8款AI工具助力论文写作,一键生成目录并智能优化内容框架
  • 贪心/妙妙题单2
  • 智能工具提升论文写作效率,8款方案支持目录自动生成与结构优化