유클리드 호제법(Euclidean Algorithm)
유클리드 호제법을 이용한 최대공약수(GCD)와 최소공배수(LCM) 구하는 알고리즘
2026.03.17
Euclidean AlgorithmGCDLCMAlgorithm
최대공약수(GCD, Greatest Common Divisor)를 구하는 가장 유명하고 압도적으로 빠른 알고리즘은 유클리드 호제법(Euclidean Algorithm)입니다. 시간 복잡도가 로 매우 빠르기 때문에 코딩 테스트에서 무조건 사용됩니다.
1.최대공약수 (GCD, Greatest Common Divisor - 유클리드 호제법)
핵심 원리
두 수 와 가 있을 때(), 를 로 나눈 나머지를 이라고 합시다. "와 의 최대공약수는, 와 의 최대공약수와 같다"는 것이 유클리드 호제법의 핵심입니다. 나머지()가 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줄만에 구할 수 있습니다.
- 공식: 두 수 와 의 곱을 최대공약수로 나누면 최소공배수가 됩니다.
pythondef lcm(a, b):
# a * b를 앞서 만든 gcd(a,b)로 나눈 몫
return (a * b) // gcd(a, b)
print(lcm(48, 18))
Output
1443. 파이썬 내장 함수 (가장 추천)
알고리즘 원리를 이해하셨다면, 실전(코딩 테스트)에서는 굳이 직접 구현하지 마시고 파이썬의 math 라이브러리 를 쓰시는 것이 가장 빠르고 안전합니다.
pythonimport math
print(math.gcd(48, 18)) # 최대공약수 (GCD)
Output
6pythonimport math
# 여러 숫자의 최대공약수도 한 번에 가능 (Python 3.9 이상)
print(math.gcd(48, 18, 24))
Output
6pythonimport math
# 최소공배수 (LCM) (Python 3.9 이상)
print(math.lcm(48, 18))
Output
144