파이썬으로 최대공약수 최소공배수 구하는 법
파이썬으로 최대공약수 최소공배수 구하는 법
파이썬에서 math 라이브러리를 import 해도 최대공약수(gcd)와 최소공배수(lcm)를 구하는 함수를 바로 사용 가능하지만, 직접 구현해보고 싶어서 여러 블로그를 토대로 만들어봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 유클리드 호제법
# 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b),
# a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
# https://devum.tistory.com/128
def gcd_(*nums):
b = 0 # 0은 모든 수의 배수이므로, 모든 수를 약수로 가진다. 따라서 n과 0의 최대공약수는 n이다. https://maramarathon.tistory.com/54
for a in nums:
while b != 0 : # b가 0이 아닌 동안 반복
a, b = b, a % b # a에 b를, b에 a와 b를 나눈 나머지를 교환하여 저장(스왑)
# 참고로 코드를 짤 때 대소관계를 생각하지 않아도 된다. 왜냐하면 b가 a보다 크다면 첫번째 사이클에서 a와 b가 서로 바뀌기 때문이다.
b = a
return a
def lcm_(*nums):
LCM = 1
for num in nums:
if num == 0:
return 0
GCD = gcd_(LCM, num) # GCD에 LCM과 num의 최대공약수를 저장
LCM = LCM * num // GCD # LCM에 LCM과 num의 최소공배수를 저장
return LCM
# 참고: https://kimhaksung.tistory.com/entry/python3LCM
👾 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 👾
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.