扩展欧几里德算法的结论二!!!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* 题意:已知 A,B,C 求 Ax+By+C=0 中 x,y 的值。
*
* 分析:此方程不一定满足:Ax+By = gcd(a,b).利用扩展欧几里德算法的结论二即可求解。
* 结论二:
* 设 a,b,c 为任意整数,g=gcd(a,b),方程 ax+by=g 的一组解是(x0,y0),
* 则当 c 是 g 的倍数时, ax+by=c 的一组解是(x0c/g,y0c/g);当 c 不是 g 的倍数时,无整数解。
*
* @author TinyDolphin
*/
public class Main {
private static int x;
private static int y;
// 扩展欧几里德算法
public static int exGcd(int a, int b) {
if (b == 0) {
x = 1;
y = 0;
return a;
} else {
int d = exGcd(b, a % b);
int temp = x;
x = y;
y = temp - a / b * y;
return d;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
int inputA;
int inputB;
int inputC;
int gcd;
while (in.hasNext()) {
inputA = in.nextInt();
inputB = in.nextInt();
inputC = in.nextInt();
gcd = exGcd(inputA, inputB);
if (inputC % gcd == 0) {
// 注意 inputC 应该取负
out.println(-x * inputC / gcd + " " + -y * inputC / gcd);
} else {
out.println(-1);
}
}
out.flush();
}
}