유클리드 호제법
유클리드 호제법(Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a > b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 이는 명시적으로 기술된 가장 오래된 알고리즘으로서도 알려져 있으며, 기원전 300년경에 쓰인 <원론> 제 7권, 명제 1부터 3까지에 해당한다.
최대공약수 : GCD(Greatest Common Divisor)
두 수, 혹은 그 이상의 여러 수의 공통인 약수 중 가장 큰 약수를 뜻한다.
유클리드 호제법을 통해 최대공약수를 구하면 O(logN)으로 시간복잡도를 줄일 수 있다.
최소공배수 : LCM(Least Common Multiple)
두 수, 혹은 그 이상의 수들의 공통인 배수를 뜻한다.
최소공배수 = 두 자연수의 곱 / 최대공약수
알고리즘
public int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}