算法学习笔记-exgcd
前言:
例题:
先看这样一道题,给定整数
性质:
性质1:
这显然是一道数学题(废话),考虑将原式根据乘法分配律转换为
综上所述,我们得出性质,若原方程有解,当且仅当
性质2:
这个性质就比较简单,它实际上是类似于递归边界的东西,并不需要怎么推导。考虑当
推导:
先看原式:
设
设有一个和原式一样的方程
根据
将式子打开,变为
合并同类项,变为
可以发现一个神奇的事情,转化后的方程与原方程本质是一样的!唯一变化的只有
如果你到这里都听懂了,那么下面的问题就很简单了,只需将
结论:
通过以上推导,可以得出:
- 原方程有解当且仅当
。 - 原方程解为
实现:
点击查看代码
void exgcd(int a, int b, int &x, int &y)
{
if(a == 1 && b == 0)//边界
{
x = 1, y = 0;
return ;
}
exgcd(b, a % b, y, x);
//这里之所以要交换x和y的位置,是因为b与a%b交换了,根据公式要把x,y也换过去
y = y - a / b * x;//按照公式赋值,由于是引用,所以x的值已经更改了。
}
总结:
第一次学
鉴于笔者也是蒟蒻,文中给出的部分推导过程与表述可能不严谨,欢迎大佬在评论区指出。
同时如果您对文章内容有不理解的地方,欢迎随时提问。
本文来自博客园,作者:zhangxiao666,转载请注明原文链接:https://www.cnblogs.com/zhangxiao666qwq/p/suanfa-exgcd.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!