알고리즘-수학

최대공약수와 최소공배수

hy1as 2023. 3. 14. 10:36
이번 포스트에서는 최대공약수와 최대공배수에 대해서 알아보겠습니다.

1. 최대공약수란?

최대 공약수 (Greatest Common Divisor)란 두 수, 혹은 그 이상의 여러 수의 공통인 약수 (공약수) 중 가장 큰수를 의미 하며 수학 기호로  $ GCM(a,b) $와 같이 표현 합니다.

만일 $ GCD(a,b) = 1 $인 경우 두 수 a, b는 서로소 (Relatively prime, Coprime)라고 합니다.


2. 최대공약수 구하기

  • 2부터 $ min(a, b) $ 까지 모든 정수로 나누어 보기
function getGCD(a, b) {
    const large = a > b ? a : b;
    const small = a > b ? a : b;
    let gcd = 1;
    for (let i = 2; i <= small; i++) {
        if (large % i === 0 && small % i === 0) {
            gcd = i;
        }
    }
    return gcd;
}
  • 유클리드 호제법 (Euclidean algorithm)

 

$ a\;mod\;b = r \quad(a \geq b)$ 일 때 

$ GCD(a, b) = GCD(b, r) $ 이 성립한다.

function getGCD(a, b) {
    if(b === 0) {
        return a;
    }
    let r = a % b;
    return getGCD(b, r)
}

 


 

3. 두 개 이상의 수들의 최대공약수

여러 수의 최대 공약수는 두 개씩 짝지어 순차적으로 최대공약수를 구해 나가면 됩니다.

$ GCD(a,b,c) = GCD(a, GCD(b, c)) $

 


 

4. 최소공배수란?

최소공배수 (Least Common Multiple)란 두 수, 혹은 그 이상의 여러 수의 공통의 배수 (공배수) 중 가장 작은 수를 의미하며 수학기호로 $ LCM(a, b) $로 표현합니다.

 


5. 최소공배수 구하기

최소공배수는 두 수의 최대공약수를 구한 후 이를 이용하여 구할 수 있습니다.

$ LCM(a, b) = a \times b \times GCD(a, b) $

 

function getGCD(a, b) {
    if(b === 0) {
        return a;
    }
    let r = a % b;
    return getGCD(b, r)
}

function getLCM(a, b) {
    return (a * b) / getGCD(a, b);
}

 


마치며

유클리드 호제법을 이용한 최대공약수 도출을 기억한다면 관련된 문제는 문제없이 풀이 할 수 있습니다.
유클리드 호제법만 기억하세요