扩展欧几里得算法笔记
扩展欧几里得算法笔记
什么是扩展欧几里得算法
扩展欧几里得算法是一种数论算法,其功能是求解这样一类二元线性不定方程:
这类方程有解的条件是
接着可以通过变形获得这个基本形式的通解,而原方程的解可以通过按比例放大的方法获得。
补充:裴蜀定理
若
这个定理的一个显然推论是:
“存在
使得 ”与“ 互质”互为充要条件。
因此扩展欧几里得算法可以用于求解乘法逆元。
算法思路
考虑一般的欧几里得算法(即辗转相除法),它的原理是:
事实上
即
因此方程可以写作:
但是这样我们依然无法在求最大公约数的同时解出
这个方程和原来的方程实际上是同一种形式,于是我们可以在递归计算最大公约数的同时求解出
移项以后我们得到:
于是大功告成。
代码
#include <bits/stdc++.h> int exgcd(int a, int b, int& x, int& y) { if (a % b == 0) { x = 0; y = 1; return b; } int r = exgcd(b, a % b, x, y); int t = x; x = y; y = t - (a / b) * y; return r; } int main(void) { int a, b, c; scanf("%d%d%d", &a, &b, &c); int x, y; int d = exgcd(a, b, x, y); if (c % d == 0) { x *= c / d; y *= c / d; printf("%d %d\n", x, y); } else { puts("No"); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具