유클리드 호제법(Euclidean Algorithm)

유클리드 호제법을 이용한 최대공약수(GCD)와 최소공배수(LCM) 구하는 알고리즘

2026.03.17

Euclidean AlgorithmGCDLCMAlgorithm

최대공약수(GCD, Greatest Common Divisor)를 구하는 가장 유명하고 압도적으로 빠른 알고리즘은 유클리드 호제법(Euclidean Algorithm)입니다. 시간 복잡도가 O(log⁡(min⁡(A,B)))O(\log(\min(A, B)))로 매우 빠르기 때문에 코딩 테스트에서 무조건 사용됩니다.

1.최대공약수 (GCD, Greatest Common Divisor - 유클리드 호제법)

핵심 원리

두 수 AA와 BB가 있을 때(A>BA > B), AA를 BB로 나눈 나머지를 RR이라고 합시다. "AA와 BB의 최대공약수는, BB와 RR의 최대공약수와 같다"는 것이 유클리드 호제법의 핵심입니다. 나머지(RR)가 0이 될 때까지 이 과정을 반복하면, 그때 나누는 수가 바로 최대공약수가 됩니다.

파이썬 구현 (반복문)

재귀함수 제한을 걱정할 필요가 없어서 가장 권장되는 구현 방식입니다.

pythondef gcd(a, b):
    # b가 0이 될 때까지 반복
    while b > 0:
        a, b = b, a % b  # a에는 b를 넣고, b에는 'a를 b로 나눈 나머지'를 넣음
    return a

print(gcd(48, 18))  
Output
6

파이썬 구현 (재귀함수)

코드가 훨씬 짧아서 외워두고 쓰기 좋습니다.

pythondef gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)

2. 최소공배수 (LCM, Least Common Multiple)

최소공배수는 방금 구한 최대공약수를 이용하면 단 1줄만에 구할 수 있습니다.

  • 공식: 두 수 AA와 BB의 곱을 최대공약수로 나누면 최소공배수가 됩니다.
  • LCM=(A×B)/GCD(A,B)LCM = (A \times B) / GCD(A, B)
pythondef lcm(a, b):
    # a * b를 앞서 만든 gcd(a,b)로 나눈 몫
    return (a * b) // gcd(a, b)

print(lcm(48, 18))  
Output
144

3. 파이썬 내장 함수 (가장 추천)

알고리즘 원리를 이해하셨다면, 실전(코딩 테스트)에서는 굳이 직접 구현하지 마시고 파이썬의 math 라이브러리 를 쓰시는 것이 가장 빠르고 안전합니다.

pythonimport math

print(math.gcd(48, 18)) # 최대공약수 (GCD)  
Output
6
pythonimport math

# 여러 숫자의 최대공약수도 한 번에 가능 (Python 3.9 이상)
print(math.gcd(48, 18, 24))  
Output
6
pythonimport math

# 최소공배수 (LCM) (Python 3.9 이상)
print(math.lcm(48, 18))
Output
144