유클리드 호제법
유클리드 호제법을 이용하여 두 수의 최대 공약수를 구할 수 있습니다.
유클리드 호제법
일반적으로 최대공약수(Greatest Comon Divisor: GCD)는 소인수 분해를 통해 공통된 소수의 곱으로 구할 수 있다.
이는 알고리즘에서 사용하기엔 비효율적이다. 유클리드 호제법은 조금 더 간단하게 최대공약수를 구할 수 있다.
유클리드 호제법은 $O(logN)$의 시간 복잡도를 보인다.
유클리드 호제법의 원리
유클리드 호제법의 기본이 되는 연산은 % 연산이다.
- 큰 수를 대상으로 작은 수를
%연산을 한다. - 작은 수와 결과로 나온 값을 대상으로 1번을 반복한다.
- 2번을 반복하다가 나머지가 0이 되는 시점의 작은 수가 GCD가 된다.
유클리드 호제법의 예시
예를 들어, 270과 192의 GCD를 구해야 한다고 해보자.
1
2
3
4
5
6
270 % 192 = 78
192 % 78 = 36
78 % 36 = 6
36 % 6 = 0
∴ GCD = 6
유클리드 호제법의 구현
유클리드 호제법은 재귀를 이용하여 손 쉽게 구현할 수 있다.
1
2
3
4
5
6
7
int GCD(int a, int b)
{
if(b == 0)
return a;
else
GCD(b, a % b);
}
최소공배수
유클리드 호제법을 이용하여 두 수의 GCD를 구하는 방법에 대해서 알아봤다.
GCD를 이용하여 두 수의 최소공배수(Least Common Multiple: LCM)을 구할 수도 있다.
예를 들어 두 수 A와 B가 주어졌을 때 LCM은 다음과 같이 구할 수 있다.
$LCM = \cfrac{A \times B}{GCD(A, B)}$
앞선 예시로 270와 192의 LCM은 다음과 같이 구할 수 있다.
1
2
3
270 × 192 = 51840
51840 ÷ GCD(270, 192) = 51840 ÷ 6
= 8640
마무리
만약 두 수가 아닌 여러 수의 GCD를 구해야 한다면 유클리드 호제법을 여러번 적용하면 된다.
다음에는 항등식에 적용할 수 있는 확장 유클리드 호제법에 대해서 알아보도록 하겠다.
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.
