파이썬으로 최대공약수, 최소공배수 구하기
최대공약수
최대공약수란?
최대공약수는 0이 아닌 정수들 사이의 공약수 중 가장 큰 공약수를 말한다.
구현
단순한 계산식 이용
- 0이 아닌 두 정수 M, N 이 있다면, 1부터 둘 중 작은 수까지 나누어 보고, 나눠지는 수 중 가장 큰 수가 최대공약수일 것이다.
1 | N, M = 100, 450 |
위의 풀이로 계산을 한다면, 시간 복잡도는 O(N)이다.
유클리드 호제법
유클리드 호제법은 2개의 자연수의 최대공약수를 구하는 알고리즘이다.
정의
2개의 자연수 a, b (a > b)에 대해 a를 b로 나눈 나머지가 r이라고 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
GCD(a,b) = GCD(b, a % b), (r > 0)일 때
1 | # 반복문 이용 |
최소공배수
최소공배수는 최대공약수를 이용하여 구할 수 있다.
lcm(a,b) = a*b/gcd(a,b)
구현
위에서 구현한 gcd 함수를 이용하면 쉽게 구현할 수 있다.
1 | def LCM(a, b): |