#include <cstdio>
#define LL long long
LL exgcd(LL a, LL b, LL &x, LL &y) {
if (!b) {
x = 1, y = 0;
return a;
}
LL d = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return d;
}
void work() {
LL n, d, x, y, k1, k2;
scanf("%lld %lld %lld %lld", &n, &d, &x, &y);
LL D = exgcd(d, n, k1, k2);
LL c = y - x;
if (c % D != 0) {
puts("Impossible");
return ;
}
LL p = n / D;
k1 = k1 * c / D;
k1 = (k1 % p + p) % p;
printf("%lld\n", k1);
}
int main() {
int tc;
scanf("%d", &tc);
while (tc --)
work();
return 0;
}
一本通1638:五指山
C++程序实现欧几里得扩展算法求解模逆问题,
最新推荐文章于 2025-12-07 21:20:15 发布
这篇文章展示了如何使用C++编写一个函数,利用欧几里得扩展算法(exgcd)来解决模逆问题,给定两个整数d和n以及两个变量x和y,计算满足条件(y-x)%d=0的k1值。
332

被折叠的 条评论
为什么被折叠?



