#include<iostream>
using namespace std;
typedef long long LL;
int t;
LL n,d,x,y,a,b;
LL exgcd(LL a,LL b, LL &x,LL &y){
if(!b){
x=1,y=0;
return a;
}
int d= exgcd(b,a%b,y,x);
y -= a/b * x;
return d;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld%lld",&n,&d,&x,&y);
int gcd = exgcd(n,d,a,b);
if((y-x) % gcd){
printf("Impossible\n");
}else {
b *= (y-x) / gcd;
n /= gcd;
printf("%lld\n",(b%n+n)%n);
}
}
}
五指山(c++实现)
最新推荐文章于 2024-10-12 22:47:18 发布
这篇文章展示了如何使用C++编写一个函数实现扩展欧几里得算法,用于计算两个大整数n和d的最大公约数及其模逆元,解决模逆问题。
摘要由CSDN通过智能技术生成