PengTory

유클리드 호제법(Euclidean-Algorithm) feat. Python 본문

Algorithm + 코테준비

유클리드 호제법(Euclidean-Algorithm) feat. Python

펭토리 2022. 12. 9. 18:08

유클리드 호제법이란? (최대공약수 구하기)

유클리드 호제법 또는 유크리드 알고리즘은 2개의 자연수 또는 정식의 최대 공약수를 구하는 알고리즘의 하나이다.

호제법이란 두 수가 서로 상대방 수를 나누어 결국 원하는수를 얻는 알고리즘을 나타낸다.

 

예시

* mod란 나머지 연산을 의미한다.

 

1071, 1029의 최대공약수

1) 1071은 1029로 나누어 떨어지지 않기 때문에 1071 mod 1029를 계산한다. => 42

2) 1029는 42로 나누어 떨어지지 않기 때문에 1029 mod 42를 계산한다. => 21

3) 42는 21로 나누어떨어진다. => 최대공약수: 21

 

24와 18의 최대공약수

1) 24와 18은 나누어 떨어지지 않기 때문에 24 mod 18을 계산한다. => 6

2) 18은 6으로 나누어떨어진다. => 최대공약수: 6

 

최소공배수 구하기

주어진 값 a와 b를 곱한 값을 최대공약수로 나누면 최소공배수가 나온다.

 

24와 18의 최소공배수

24 * 18 // 6(최대공약수) = 72

 

파이썬 코드

아래와 같은 방식으로 최대공약수, 최소공배수를 구할 수 있다.

def GCD(a,b):
    while b:
        a,b = a%b
    return a

def LCM(a,b):
    ans = (a*b) // GCD(a,b)
    return ans

 

또한 파이썬에는 math 함수를 사용하면 최대공약수와 최소공배수를 매우 쉽게 구할 수 있다.

import math

print(math.gcd(a,b))
print(math.lcm(a,b))

(참고) math.lcm은 파이썬 3.9 버전부터 사용할 수 있다! 3.5~ 3.8 버전에서는 오류가 날 것이다.

'Algorithm + 코테준비' 카테고리의 다른 글

[백준] 1312_소수 (Python)  (0) 2022.12.09
[LeetCode] 121번 (Python)  (0) 2022.10.20
[백준] 9095 _ 1, 2, 3 더하기 (Python)  (0) 2022.10.17