exgcd详解
2024-10-08 14:45:07
1.exgcd是什么?
exgcd大名扩展欧几里得算法,用来求形如 \(\gcd(a,b) = ax + by\) 的方程的通解。
2.推导
引理:存在 \(x,y\in \mathbb Z\) 使得 \(\gcd(a,b) = ax + by\)(裴蜀定理,请自行百度)
当 \(b=0\) 时,\(\gcd(a,b)=a\),此时 \(x_1=1\), \(y_1=0\)
当 \(b\not=0\) 时,
由题,\(ax+by=\gcd(a,b)=\gcd(b,a\bmod b)=bx_2+(a\bmod b)y_2 ①\)
又因 \(a\bmod b=a-\lfloor \dfrac{a}{b}\rfloor b\)
则 \(ax+by=bx_2+(a-a\lfloor \dfrac{a}{b}\rfloor b)y_2\)
\(ax+by=bx_2+ay_2-\lfloor \dfrac{a}{b} \rfloor by_2\)
\(ax+by=ay_2+bx_2-b\lfloor \dfrac{a}{b} \rfloor y_2\)
\(ax+by=ay_2+b(x_2-\lfloor \dfrac{a}{b} \rfloor y_2) ②\)
将 \(②\) 式对比 \(①\) 式,得出:
方程 \(\gcd(a,b) = ax + by\) 的通解为 \(x=y_2\) , \(y=x_2-\lfloor \dfrac{a}{b} \rfloor y_2\)
//公式是我一个字一个字手敲的,要敲断了……
3.代码实现
void exgcd(int &x,int &y,int a,int b)
{
if(!b)
{
x=1;
y=0;
return;
}
exgcd(x,y,b,a%b);
int t=x;
x=y;
y=t-a/b*y;
}
最新文章
- [转]Asp.Net Core 简单的使用加密的Cookie保存用户状态
- RAF(RandomAccessFile)类
- href=";#";和javasrcript:void(0)的区别
- android常用命令
- C++ STL之priority_queue
- Unreal Engine4 蓝图讲解
- SQL server 跨库插入数据
- Win10的革新与突破
- OC - 21.CALayer核心要点及实例解析
- 【CreateJS】WebStorm+Adobe Animate CC 搭配开发HTML5,入门教程
- 关于JAVA自带MD5的方法
- android view控件的显示和隐藏动画效果
- Android项目-高考作文项目架构(二)
- Android com.daimajia.slider.library.SliderLayout 去掉底部半透明标题背景
- Nodejs 操作 Sql Server
- window下github的学习心得
- JS中navigator对象详解
- nginx 报错 connect() failed (111: Connection refused) while connecting to upstream
- vue+vue-cli+vuex+vrouter 开发学习和总结
- zzuli2226:神奇的薯条