exgcd

i64 exgcd(i64 a, i64 b, i64 &x, i64 &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
i64 gcd = exgcd(b, a % b, x, y);
i64 tmp = x;
x = y;
y = tmp - a / b * y;
return gcd;
}
i64 cal(i64 a, i64 b, i64 c) {
i64 x, y;
i64 gcd = exgcd(a, b, x, y);
if (c % gcd != 0) return -1;
x *= c / gcd;
b /= gcd;
i64 ansx = x % abs(b);
if (ansx <= 0) ansx += b;
return ansx;
}
// c 可以为负值!直接带入 -1 是没问题的!
// 调用cal即为解方程组 ax + by = c 的最小 x, 全部解为 x +- t * b / gcd(a, b); (t为任意整数)