컴퓨터공학/이산수학

[이산수학] 최대공약수와 최소공배수 (C++)

QuickClid 2025. 3. 28. 21:24

최대공약수

Greatest Common Divisor라는 명칭에서 알 수 있듯이, 이는 공약수 중 최댓값을 의미한다.

 

GCD(a, b) = GCD(b, a mod b)

 

코드

이를 코드로 나타내보면 이렇게 된다;

int gcd(int a, int b)
{
    while (b != 0)
    {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

 

사용처

프로그래머스의 이 문제 --> https://school.programmers.co.kr/learn/courses/30/lessons/120808에서 기약분수를 구하기 위해 사용할 수 있다.

 

1. 분자와 분모를 통일해준다. 이때, 서로의 분모를 서로의 분자에게 곱해주는 식으로 통일해준다.

2. 이후 분자와 분모의 최대공약수로 분자와 분모를 나눠준다.


최소공배수

Least Common Multiple이라는 명칭에서 알 수 있듯이, 이는 공배수 중 최솟값을 의미한다. 

 

일반적으로, 최대공약수를 이용하여 구한다;

 

LCM(a, b) = a * b / GCD(a, b)

 

코드

이 과정을 코드로 간단하게 나타내보면 이렇게 된다;

int lcm(int a, int b)
{
    return (a * b) / gcd(a, b);
}

 

사용처

나중에 코딩테스트 문제를 풀어보다가 사용처를 발견하면 적겠다!