一开始我也很不理解这X1、Y1、X2、Y2的关系到底是怎么推出来的,y总写的代码也很简洁,隐藏了很多细节,这里说一下我的理解。
大家跟着上面的图推导一下,肯定能理解他们之间的关系。拜拜啦、、、
import java.util.*;
public class Main{
static long x2;
static long y2;
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int T = input.nextInt();
while(T-- > 0){
int n = input.nextInt();
int d = input.nextInt();
int x = input.nextInt();
int y = input.nextInt();
int gcd = extGcd(n,d);
//x2 * n + y2 * d = gcd
if((y - x) % gcd != 0){
System.out.println("Impossible");
}else{
y2 *= (y-x) / gcd;
n /= gcd;
System.out.println((y2 % n + n ) %n);
}
}
}
public static int extGcd(int a,int b){
if(b == 0){
x2 = 1;y2 = 0;
return a;
}else{
int gcd = extGcd(b,a%b);
long x1 = y2;
long y1 = x2 - y2 * (a / b);
x2 = x1;
y2 = y1;
return gcd;
}
}
}
图上有一点错了,括号内应该是减
厉害,按y总的方式推会很奇怪,你这样对多了,把图上括号内加号改成减号,就非常完美了