[알고리즘] 최대공약수(GCD), 최소공배수(LCM) - JAVA
최대공약수(GCD), 최소공배수(LCM)
최대공약수(GCD)
GCD는 Greatest Common Divisor의 약자로 최대공약수이다.
두 수의 약수들의 공통된 값 중 최댓값을 말한다.
GCD를 구하는 방법을 알아보자.
- BigInteger 내장 함수
private static int gcd(int a, int b) {
BigInteger n = BigInteger.valueOf(a);
BigInteger m = BigInteger.valueOf(b);
return n.gcd(m).intValue();
}
- 재귀
private static int gcd(int a, int b) {
if(b == 0) {
return a;
}
return gcd(b, a % b);
}
- 반복문
private static int gcd(int a, int b) {
int n = a;
int m = b;
if (a < b) {
n = a;
m = b;
}
int tmp;
while (m != 0) {
tmp = n % m;
n = m;
m = tmp;
}
return n;
}
최소공배수(LCM)
최소공배수는 구한 GCD를 이용해 구할 수 있다.
두 수 a와 b를 곱하고 최대공약수로 나눠주면 최소공배수가 된다.
private static int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}