扩展欧几里得算法关键在于 exgcd
函数的实现
见代码注释
#include <iostream>
using namespace std;
const int NN = 1e5 + 10;
int n, a, b;
int exgcd(int a, int b, int& x, int& y){ // 注意这里的x, y 是用的引用
if (!b){
x = 1, y = 0;
return a;
}
int d = exgcd(b, a % b, y, x); // 这里将b和a%b的x`,y`的值分别存在a和b的y,x里面之后,
// 由b*x`+(a%b)*y` = a*x+b*y 可以得到x = y`, y = x` - a/b*y`
y -= a / b * x;
return d;
}
int main(){
cin >> n;
while (n --){
int x, y;
scanf("%d%d", &a, &b);
exgcd(a, b, x, y);
printf("%d %d\n", x, y);
}
return 0;
}