두 개의 정수 혹은 다수의 자연수에서 최대공약수를 구하는 알고리즘
이다.
유클리드에 의해 기원전 300년 경에 발견된 가장 오래된 알고리즘이다.
두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘
두 정수 A와 B의 최대공약수는 A와 B를 나누어 떨어지게 하는 수 중에서 가장 큰 정수
라는 사실을 기반으로 접근한다
큰 수를 작은 수로 나누어 떨어지게 한 뒤, 수를 반복적으로 수행하여 나머지가 0이 될 때까지 작동하는 방법 👉 이 때, 작은 수가 최대공약수이다
b
가 0이라면, a
가 최대공약수가 되며, 그렇지 않으면 b
와 a % b
의 최대 공약수를 구한다public int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
public int gcd(int a, int b) {
while(b != 0) {
int temp = b;
b = a % b;
a = temp;
}
}
a
와 b
의 최대공약수
를 이용하여 최소공배수
를 구한다public int lcm(int a, int b) {
return a * b / gcd(a, b);
}