728x90
[파이썬] 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기
유클리드 호제법
A>B일때, A%B를 R이라고 할때,
A와 B의 최대공약수와 B와 R의 최대공약수가 같다는 원리이다.
A에 B를 대입하고 B에 R을 대입하는 과정을 반복하다보면 R=0이 되는 상황이 생기는데, 이때 B자리에 위치한 숫자가 바로 A와 B의 최대 공약수가 된다.
def GCD(x, y):
while y:
x, y = y, x%y
return x
print(GCD(10, 12))
2
y가 0이 아닌 수일때(참일 때) x, y = y, x%y는 계속해서 반복된다.
x % y == 0이 되는 순간에 x%y은 y에 대입되므로 반복문의 조건을 만족하지 못해 빠져나오게 된다.
x에는 y의 값이 대입되었으므로 x값을 반환함으로써 최대공약수를 얻을 수 있다.
이렇게 얻어낸 최대공약수를 이용하면 최소공배수를 쉽게 구할 수 있다.
x*y를 최대공약수로 나눈 몫이 최소공배수가 되기 때문이다.
def GCD(x, y): # 최대공약수
while y:
x, y = y, x%y
return x
def LCM(x,y): # 최소공배수
return (x*y) // GCD(x,y)
print(GCD(10, 12), LCM(10, 12))
2 60
파이썬에 내장된 math 라이브러리를 이용하면 더욱 간단하게 최대공약수와 최소공배수를 구할 수 있다.
import math
print(math.gcd(10, 12, 18)) # 최대공약수
print(math.lcm(10, 12, 15)) # 최소공배수
2 60
기본적으로 여러개의 인자값을 받을 수 있으나 온라인 파이썬 프로그램 환경에서는 인자값을 2개까지만 받는 경우가 있다고 한다.
728x90
'파이썬 > 자료구조와 알고리즘' 카테고리의 다른 글
[python] 백준 11557 : Yangjojang of The Year (0) | 2022.04.25 |
---|---|
[파이썬] 클래스, self, __init__, __str__ (0) | 2022.03.06 |
[파이썬/자료구조] 스택(stack) (0) | 2022.02.22 |
[파이썬/자료구조] 큐(queue) 덱(deque) (0) | 2022.02.20 |
파이썬 자료구조/알고리즘 10 : 소수 찾기 알고리즘 (0) | 2022.02.10 |