Algorithm

[Algorithm] GCD, LCM(최대공약수, 최소공배수) 구하기 (Feat. 유클리드 호제법)

용성군 2021. 9. 24. 23:23
728x90
반응형

유클리드 호제법

유클리드 호제법은 유클리드가 발견한 두 수의 최대공약수를 구하는 방법이다. 원래 우리가 초등학교때 배운 방법은 컴퓨터에서 실행하려고 할 때, 두 수가 커지면 비효율적으로 동작하게 된다. 따라서 유클리드 호제법을 이용해 최대공약수를 구하고 그 다음 최소공배수를 구해야한다. 


최대공약수

반복문을 이용해 구현한 유클리드 호제법은 다음과 같다. 

int GCD(int a, int b)
{
    while(b!=0)
    {
        int c = a % b;
        
        a = b;
        b = c;
    }
    return a;
}

최소공배수

두 수의 곱은 두 수의 최대공약수와 최소공배수와 같다는 수학적 성질을 이용해 최소공배수를 구한다.

 

예를 들어 10와 15의 최대공약수는 5이다. 따라서 최소공배수를 구하기 위해서 다음과 같은 식을 만족한다.

10 * 15 = 5 * LCM

LCM = 30

int LCM(int a, int b)
{
    return a * b / gcd(a, b);
}
728x90
반응형