// 102 扩展欧几里得.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/21/problem/487
输入T,一共T组数据,每组两个数a,b
,输出ax−by=gcd(a,b)的最小非负整数解(x,y)。
输入格式
第一行一个数字T。
接下来T行,每行两个数字a,b。
输出格式
一共T行,每行两个数,表示x,y。
输入样例
2
1 2
100 150
输出样例
1 0
2 1
数据规模
对于100%
的数据,保证1≤T≤104,1≤a,b≤109。
*/
#include <iostream>
using namespace std;
int T, a, b;
int exgcd(int a, int b, int& x, int& y) {
if (!b) {
x = 1, y = 0;
return a;
}
int d = exgcd(b, a % b, x, y);
int t = y;
y = x - a / b * y;
x = t;
return d;
}
void solve() {
cin >> a >> b;
int x, y;
int d = exgcd(a, b, x, y);
if (x < 0 || y>0) {
x += b / d; y -= a / d;
}
y = -y;
cout << x << " " << y << endl;
}
int main()
{
cin >> T;
while (T--) {
solve();
}
return 0;
}
标签:return,int,样例,欧几里得,扩展,exgcd,102
From: https://www.cnblogs.com/itdef/p/18676687