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

扩展欧几里得算法

扩展欧几里得算法

常用来计算不定方程 \(ax+by=\gcd(a,b)\) 的一组特解,采用递归的计算流程

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

根据欧几里得定理可知

\[\gcd(a,b)=\gcd(b,a\ \mathrm{ mod}\ b)\\ \gcd(b,a\ \mathrm{ mod}\ b)=bx_1+(a-\lfloor\frac{a}{b}\rfloor\times b)y_1 \]

拆开括号移项后得到

\[\begin{align} \gcd(a,b)&=ax+by\\ \gcd(b,a\ \mathrm{ mod}\ b)&=ay_1+b(x_1-\lfloor\frac{a}{b}\rfloor y_1)\\ \Rightarrow x=y_1&,y=x_1-\lfloor\frac{a}{b}\rfloor y_1\end{align} \]

当递归计算 \(\gcd(a,b)\) 中的 \(b = 0\) 时,\(ax=\gcd(a,0)=a\) ,此时应当返回 \(x=1,y=0\);逐层向上回代计算

最终求得特解 \(x_0,y_0\) ,然后考虑通解的构造

\[\left\{ \begin{align} x=x_0+\frac{b}{\gcd(a,b)}\times k\\ y=y_0-\frac{a}{\gcd(a,b)}\times k\\ \end{align} \right. \]

这样构造的原因是可以满足

\[a\left(x_0+\frac{b}{\gcd(a,b)}\times k\right) + b\left(y_0-\frac{a}{\gcd(a,b)}\times k\right)=ax_0+by_0=\gcd(a,b) \]

LL exgcd(LL a, LL b, LL &x, LL &y){if (b == 0){x = 1, y = 0;return 1;}LL x1, y1, d;d = exgcd(b, a % b, x1, y1);//递归计算下一层x = y1, y = x1 - a / b * y1;//回代计算return d;//返回当前gcd(a, b)
}

不定方程

根据裴蜀定理,可以证明方程 \(ax+by=c\) 存在正整数解当且仅当 $c\equiv 0(\mathrm{mod}\ \gcd(a,b)) $

在计算不定方程的过程中,可以先计算出方程 \(ax+by=\gcd(a,b)\) 的某个特解

然后将特解 \(x_0,y_0\) 乘上 \(\frac{c}{\gcd(a,b)}\) 得到 \(ax+by=c\) 的特解 \(x_t,y_t\) ,构造通解有:

\[\left\{ \begin{align} x=x_t+\frac{b}{\gcd(a,b)}\times k\\ y=y_t-\frac{a}{\gcd(a,b)}\times k\\ \end{align} \right. \]

同余方程

形如 \(ax\equiv b(\mathrm{mod}\ m)\) 的方程为同余方程,可以利用扩展欧几里得算法求解

\[ax\equiv b\mod m \iff ax=(-my) + b\\ \]

得到 \(ax+my=b\) ,这个不定方程利用扩展欧几里得算法求解后可以得到一组特解(\(b\) 应当被 \(\gcd(a,m)\) 整除)

乘法逆元

\(a,m\) 互质时,对于同余方程 \(ax\equiv1(\mathrm{mod\ m})\)\(a\) 的乘法逆元 \(x\)

同样转化为 \(ax+my=1\) ,然后求解 \(ax+my=\gcd(a,m)\) 的特解 \(x\)

最终的逆元应该被表示为 \(x\ \mathrm{mod}\ m\)

LL exgcd(LL a, LL b, LL &x, LL &y){if (b == 0){x = 1, y = 0;return 1;}LL x1, y1, d;d = exgcd(b, a % b, x1, y1);x = y1, y = x1 - a / b * y1;return d;
}LL a, b, x, y;
cin >> a >> b;
LL g = exgcd(a, b, x, y);
cout << (x % b + b) % b;
http://www.hskmm.com/?act=detail&tid=33804

相关文章:

  • 今日学习笔记
  • CSP-S 2022 Solution
  • 印刷电子技术挑战传统PCB主导地位
  • 2025-10-18
  • 某兔网站加密学习
  • 5.vtk学习——点云显示进阶
  • [LangChain] 03. 缓存
  • 面试 / 答辩总卡壳?这款 AI 面试辅助新功能:上传专属资料,精准应答不翻车
  • C语言编程之旅:从入门到实战
  • 引用
  • 实用指南:大数据毕业设计 python智慧交通监控系统 Flask+Echarts可视化 百度地图 毕业设计(源码)✅
  • Selenium元素定位总失败?这8种定位策略你必须掌握
  • 2025 年钢闸门厂家最新推荐排行榜:涵盖不锈钢 / 渠道 / 河道 / 水库 / 平面 / 手动 / 电动 / 液压钢闸门,聚焦十大实力厂家核心优势
  • 2025 年最新铸铁闸门源头厂家推荐排行榜,涵盖四川 / 镶铜 / 渠道 / 圆形 / 方形等类型,助力一站式采购优质供应商
  • 内存四区
  • 2025 年钢闸门源头厂家最新推荐口碑排行榜:聚焦防腐技术与密封性能,助力水利工程采购精准选型固定卷扬/四川卷扬/螺杆/螺杆式启闭机厂家推荐
  • 2025 年耐火砖厂家最新推荐排行榜:绝热/轻质/莫来石等类型优质厂家权威榜单发布氧化铝泡沫/氧化铝空心球/抗渗碳/高温轻质莫来石耐火砖厂家推荐
  • 【转】[C#] Web API 中的常见层次
  • 【Azure Developer】使用Azure Developer CLI (azd)部署项目时候遇见无法登录中国区Azure的报错
  • 2025 年清污机源头厂家最新推荐榜单:聚焦耐腐蚀与智能清污实力,权威筛选优质品牌供采购参考回转式/回转式格栅/不锈钢/四川清污机厂家推荐
  • Intellij IDEA里的各种快捷键
  • 2025年西安买房推荐与西安学区新房推荐排名前十榜单
  • 2025年西安买房终极指南:十大高性价比楼盘权威推荐
  • AI教育应用隐忧:技术普及与培训缺失
  • JBoltAI 智能混剪:零门槛搞定 “会说话” 的专业视频,新手也能当创作高手 - 那年-冬季
  • Java技术公司如何借力AIGS,开启人工智能融合新篇章? - 那年-冬季
  • AITCA联盟生态:基于JBoltAI框架的产业格局重构前瞻 - 那年-冬季
  • jiangly 模板
  • 基于JBoltAI框架的AITCA联盟生态:渠道商转型与升级的新契机 - 那年-冬季
  • QOJ #14426. Grid Problem 题解