【算法学习】欧几里得算法详解(包括扩展、同余方程)_欧式算法的计算方式_沙diao网友的博客-CSDN博客
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
//typedef pair<int,int> PII;
//#define x first
//#define y second
const int N = 2e5 + 2;
int gcd(int a, int b) {
if (b) {
return gcd(b, a % b);
} else
return a;
}
int ex_gcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1, y = 0;
return a;
}
int d = ex_gcd(b, a % b, x, y);
int t = x;
x = y;
y = t - (a / b) * y;
return d;
}
//void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
signed main() {
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t, i, j, n, s, k, x, y;
cin >> t;
while (t--) {
cin >> n >> s >> k;
if (s % (gcd(k, n)))
puts("-1");
else {
ex_gcd(k, n, x, y);
int d = gcd(k, n);
//printf("%d * %d + %d * %d = %d\n", k, x * s / gcd(k, n), n, y * s / gcd(k, n), s);
int xx = n / gcd(k, n);
x = -x * s / gcd(k, n);
cout << (x % xx + xx ) % xx << endl;
}
}
}