확장 유클리드 호제법
유클리드 호제법의 목적이 두 수의 최대 공약수를 구하는 것이라면 확장 유클리드 호제법의 목적은 방정식의 해를 구하는 것입니다.
Ax + By = C
Question - 21568
Code
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class N45_P21568_Ax_By_C {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
long gcd = gcd(a, b);
if (c % gcd != 0) {
System.out.println(-1);
} else {
int mok = (int) (c / gcd);
long[] ret = Excute(a, b);
System.out.println(ret[0] * mok + " " + ret[1] * mok);
}
}
public static long[] Excute(long a, long b) {
long[] ret = new long[2];
if (b == 0) {
ret[0] = 1; ret[1] = 0;
return ret;
}
long q = a / b;
long[] v = Excute(b, a % b);
ret[0] = v[1];
ret[1] = v[0] - v[1] * q;
return ret;
}
private static long gcd(long a, long b) {
while (b != 0) {
long temp = a % b;
a = b;
b = temp;
}
return Math.abs(a);
}
}
Idea
reference
Last updated