JAVA
[Java] 최대공약수, 최소공배수 구하기
배씌
2023. 7. 20. 14:49
유클리드 호제법 (Euclidean algorithm)
: 2개의 수에 대하여 최대공약수를 구하는 알고리즘
자연수 a,b 가 있고, r = a mod b (즉, r 은 a를 b로 나눈 나머지)
이 때, (a,b)의 최대공약수와 (b,r)의 최대공약수는 같다.
즉, 아래와 같다.
GCD(a,b) = GCD(b,r)
이 성질에 따라
1) a를 b로 나눈 나머지 r 을 구하고,
2) b를 r로 나눈 나머지 r' 을 구한다.
위 과정을 반복하며 나머지가 0이 될때 나눈 수가 a,b 의 최대공약수가 된다.
ex) 60과 48의 최대공약수는 ?
60 % 48 = 12
48 % 12 = 0 // 최대공약수 : 12
// 최소공배수 : (60 x 48) / 12 = 240
최소공배수 : (a x b) / (최대공약수)
코드
// 최대공약수 (GCD)
int gcd(int a, int b) {
if(b == 0)
return a;
// GCD(a, b) = GCD(b, r) 이므로, (r = a%b)
return gcd(b, a%b);
}
// 최소공배수 (LCM)
int lcm(int a, int b) {
return (a*b) / gcd(a,b);
}