기본적인 최대 공약수 알고리즘
// 기본적인 방법
public int gcd1(int a, int b) {
int size = Math.min(a,b);
for(int i = size; i > 0; i--) {
if(a % i == 0 && b % i == 0) return i;
}
return 1;
}
// 유클리드 호제법 - 반복문을 이용한 방법
public int gcd2(int a, int b) {
while(a%b != 0) {
int tmp = a % b;
a = b;
b = tmp;
}
return b;
}
// 유클리드 호제법 - 재귀를 이용한 방법
public int gcd3(int a, int b) {
if (a % b == 0) return b;
return gcd(b, a%b);
}
유클리드 호제법을 적용한 최대 공약수 알고리즘

위의 최대 공약수를 구하는 알고리즘을 상황에 따라 선택에 적용한다.
두 수의 곱을 최대 공약수로 나눈다.
유클리드 호제법을 적용한 최대 공약수 구하는 알고리즘과 같이 여러 수의 최소 공배수를 구해야하는 경우 앞의 두 수의 최소 공배수를 구해서 그 다음수와 최소공배수를 구하는 방법식으로 진행 하면된다.
이 또한 O(logN)의 시간 복잡도를 가진다.
pubilc int gcd(int a, int b) {
if (a % b == 0) return b;
return gcd(b, a%b);
}
pubilc int lcm(int a, int b) {
return (a * b) / gcd(b, a%b);
// 자바는 int형끼리 나누면 자동으로 몫 나눗셈 결과가 나온다.
}