문제
풀이
public static int[] solution(int n, int m) {
int[] answer = new int[2];
int max = Math.max(n, m);
int min = Math.min(n, m);
while(min != 0) {
int r = max % min;
max = min;
min = r;
}
int gcd = n * m / max;
answer = new int[]{max, gcd};
return answer;
}
설명
최대 공약수 구하기
유클리드 호제법
- 유클리드 호제법은
두 수의 최대공약수를 구하는 알고리즘
이다.
- 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
MOD
연산의 반복 수행 (MOD연산 - 두 값을 나눈 나머지를 구하는 것)
- 연산 중에 나온 나머지들은 모두 최대공약수 N의 배수인 수이다.
1. 반복문
int GCD(int a, int b){
int tmp;
while(b != 0){
r = a % b;
a = b;
b = r;
}
return a;
}
2. 재귀함수
int GCD(int a, int b){
return b!= 0 ? GCD(b, a % b) : a;
}
최소 공배수 구하기