GCD / LCM
Summary
최대공약수는 유클리드 호제법, 최소공배수는
a / gcd * b로 구한다.
a * b / gcd는 먼저 곱하다 overflow가 날 수 있다.
검증 템플릿
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long a = Long.parseLong(st.nextToken());
long b = Long.parseLong(st.nextToken());
long g = gcd(a, b);
long l = a / g * b;
System.out.println(g);
System.out.println(l);
}
static long gcd(long a, long b) {
a = Math.abs(a);
b = Math.abs(b);
while (b != 0) {
long r = a % b;
a = b;
b = r;
}
return a;
}
}핵심
gcd(a, b) == gcd(b, a % b)
b가 0이 되면 a가 최대공약수
lcm = a / gcd(a, b) * b주의점
음수가 들어오면 Math.abs 처리
lcm은 overflow 가능하므로 long 사용
BigInteger에는 gcd 내장 메서드가 있음