-
유클리드 호제법 - 최대공약수, 최소공배수알고리즘 2022. 9. 6. 12:04
두 수 n, m 의 최대 공약수를 구하는 방법으로, 단순하게 반복문을 통해 구할수도 있다.
하지만 효율적인 방법은 유클리드 호제법을 이용하는 것이다.
유클리드 호제법
두 수 n 과 m의 최대공약수는 m 과 n%m(n에서 m을 나눈 나머지) 의 최대공약수와 같다.
➡️ n 과 m의 최대공약수 == m과 n%m의 최대공약수
그림과 같이 n 자리에 m을 대입하고, m 자리에 n%m을 대입해서 나머지를 구하다 보면,
결국에는 나머지가 0이 되는 순간이 오고, 그 때의 m이 두 숫자의 최대 공약수가 된다.
def solution(n, m): while m > 0: #1 n, m = m, n%m #2 return n #3
1. m이 0보다 클때까지 반복한다.
2. n 자리에 이전 m을 대입하고, m자리에 n % m을 대입한다.
3. m이 0이 된 순간의 n이 이전에 n % m == 0 일때의 m 이므로 n이 최대공약수이다. n을 반환한다.
최소공배수 구하기
두 수 n과 m의 최소공배수는 n과 m의 최대공약수를 알면 쉽게 구할 수 있다.
n과 m의 곱을 최대공약수로 나눈 몫이 최소공배수이다.
LCM (Least Common Multiple) = n * m // GCD(Greatest Common Divisior)
'알고리즘' 카테고리의 다른 글
DFS, BFS - 타겟넘버 (0) 2022.09.29 DFS - 음료수 얼려먹기 (0) 2022.09.26 파이썬 Deque와 List의 pop( ) (2) 2022.09.15 약수의 합 (0) 2022.09.05 에라토스테네스의 체 - 소수 구하기 (0) 2022.09.05