根据迭代,有:
x' = y |
y' = x - (a/b)*y |
int exgcd(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a%b, x, y);
int z = x;
x = y;
y = z - (a / b) * y;
return d;
}
例题1:求解蓝桥杯一步之遥。
#include <iostream>
using namespace std;
//求解ax + by = gcd(a, b)的解,即求满足的x和y,并返回a和b的最大公约数。
int exgcd(int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a % b, x, y);
int z = x;
x = y;
y = z - (a / b) * y;
return d;
}
int main()
{
int a, b, x, y;
a = 97, b = -127;
exgcd(a, b, x, y);
cout << x + y << endl;
return 0;
}
/* 答案为97 */
一步一步迭代。有