扩展欧几里得算法(解不定方程)
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展欧几里得算法(解不定方程)相关的知识,希望对你有一定的参考价值。
解方程:
ax+by=gcd(a,b)
有欧几里得定理得:此方程一定有解
int extend_gcd(int a,int b,int &x,int &y) {
//扩展欧几里得算法
/*
* 这是一个尾递归
* 思路:gcd的扩展,在求gcd(a,b)的同时,解方程ax+by=gcd(a,b)
* 因为gcd(a,b)=gcd(b,a%b)
* 所以ax+by=bx1+(a-a/b*b)y1
* 化简一下得到:ax+by=ay1+b(x1-a/b*y1);(得到递推式)
*
*
* 在求得最大公约数的同时,也得到x1的初始值为1,y1的初始值为0
* 然后开始尾递归,另x=y1,y=x1-a/b*y1
*
*/
if (b == 0) {
x = 1;
y = 0;
return a;
}
int mygcd = extend_gcd(b,a%b,x,y);
int temp = x;
x = y;
y = temp - a / b *y;
return mygcd;
}
以上是关于扩展欧几里得算法(解不定方程)的主要内容,如果未能解决你的问题,请参考以下文章