개념
두 자연수를 모두 나누어떨어지게 하는 가장 큰 수가 최대공약수(GCD)입니다. 두 수의 공통 배수 중 가장 작은 자연수가 최소공배수(LCM)입니다.
개와 개를 각각 같은 크기의 묶음으로 남김없이 나누려면, 묶음의 크기는 두 수의 공약수여야 합니다. 가장 큰 묶음의 크기가 최대공약수입니다. 번마다 일어나는 일과 번마다 일어나는 일이 동시에 다시 일어나는 주기를 구할 때는 최소공배수를 사용합니다.
유클리드 호제법
큰 수를 작은 수로 나눈 나머지로 문제를 줄입니다. 를 로 나눈 몫이 , 나머지가 이면 입니다.
- 와 의 공약수는 도 나눕니다.
- 반대로 와 의 공약수는 도 나눕니다.
따라서 와 의 공약수가 같으므로 입니다. 이 변환을 반복하면 나머지가 점점 작아집니다. 나머지가 이 되면 앞의 수가 뒤의 수로 나누어떨어지므로 마지막으로 나눈 수가 최대공약수입니다.
와 은 , 이므로 최대공약수가 입니다.
최소공배수
최대공약수를 라고 하면 , 로 나타낼 수 있습니다. 공통 인수를 모두 로 꺼냈으므로 와 의 최대공약수는 입니다. 두 수의 배수가 되려면 공통 부분 와 나머지 인수 를 모두 포함해야 하므로 최소공배수는 입니다.
두 수를 그대로 곱한 에는 공통 부분 가 한 번 더 들어 있습니다. 따라서 로 한 번 나누면 됩니다.
, 이므로 최소공배수는 입니다.
복잡도
입력한 두 자연수를 라고 합니다.
| 연산 | 시간복잡도 | 추가 공간 |
|---|---|---|
| 반복 호제법·최소공배수 |
예제
문제
두 양의 정수의 최대공약수와 최소공배수를 구하여라.
입력
첫째 줄에 두 양의 정수 가 공백을 사이에 두고 주어진다. 이다.
출력
최대공약수와 최소공배수를 공백으로 구분하여 출력한다.