분수 결과값을 기약분수로 만드는 문제에서 최대공약수를 구하는 알고리즘이 필요했다.
아래는 유클리드 호제법을 이용하여 최대공약수를 구하는 메서드이다.
* 유클리드 호제법(Euclidean algorithm)이란?
두 수의 최대공약수(GCD)를 빠르게 구하는 고대 그리스 수학자 유클리드가 고안한 알고리즘이다.
두 정수 a와 b(단, a > b)가 있을 때, a와 b의 최대공약수(GCD)는 b와 a % b의 최대공약수와 같다는 원리를 반복적으로 이용한다.
// 1. 재귀함수 사용
public static int gcd1(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
// 2. 반복문 사용
public static int gcd2(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}