扩展欧几里得算法-复习
求解二元一次方程
问题
希望求出
思路点拨
首先,这样的方程不一定有正整数解。比如
判定
定义:设 是不为 的整数,那么一定存在整数 ,满足 。
证明:
1.若任何一个等于
- 若
不等于 ,设 。
对于
我们考虑辗转相除法(本质上是优化的更相减损术的优化,上已证明),就是
我们算法展开成带余数除法的形式:
我们令辗转相除法运行知道互质的时候推出
移项,得:
那么我们将
我们可以不断消除
所以
求解
我们考虑求解
对于
在
我们考虑在欧几里得算法的过程中,一直如此递归最终可以得出方程
int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return a;
}
int ans=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现