최대공약수(GCD, Greatest Common Divisor)는 공약수 가운데 가장 큰 수다. 예를 들어, 두 자연수 \(n\), \(m\)이 있다고 가정하고 두 수의 최대공약수를 찾아보자. 먼저, 두수를 소인수 분해를 하여 나타낸다. 두 수를 곱했을 때 각 소수별 가장 작은 승수를 찾아 조합하면 된다.
추가로, 최대공약수와 최소공배수는 다음 관계를 갖는다.
\[\gcd\{n,m\} = \frac{n \times m}{\operatorname{lcm}\{n,m\}}\] 두 수 192와 72의 최대공약수를 소인수 분해 방법을 통해 구해보자.
소인수 분해 방법 말고 유클리드 호제법(Euclidean algorithm)을 사용해서 똑같이 두 수 192와 72의 최대공약수를구하여 보자. 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 먼저 두 수 중에서 작은 수로 큰 수를 나눈다.
상기 알고리즘을 R코드로 작성하면 다음과 같다.
function(n, m) {
euclid_gcd <-if(n < m) {
stop("n, m 두 숫자 순서를 바꿔 입력하세요.")
}while(m > 0) {
m
temp <- n %% m
m <- temp
n <-
}return(n)
}# gcd(72, 192)
# Error in gcd(72, 192) : n, m 두 숫자 순서를 바꿔 입력하세요.
euclid_gcd(192, 72)
[1] 24
numbers
팩키지 extGCD()
함수는 확장된 유클리드 알고리즘으로 최대공약수를 계산할 뿐만 아니라 최대공약수를 두수를 선형결합으로 표현할 수 있게 해준다. 즉, \(a, b\)는 최대공약수를 구하게 되면 2원 1차 연립방정식을 세울 수 있어 쉽게 구할 수 있다.
library(numbers)
::extGCD(192, 72) numbers
[1] 24 -1 3
최소공배수(LCM, Least Common Multiple)은 양의 공배수 가운데 가장 작은 수를 의미하며, 분수끼리 더하거나 뺄 때 사용되는 통분이 가장 흔히 사용되는 응용으로 볼 수 있다. 통분 과정에서 최소공분모(분모의 최소공배수)를 계산하게 되면 쉽게 통분을 할 수 있다.
\[\frac{2}{21} + \frac{1}{6} = \frac{4}{42} + \frac{7}{42} = \frac{11}{42}\]
여기서, 최대공약수와 최소공배수 다음 성질을 이용한다.
최소공배수를 활용한 사례를 알아보자.1
어느 버스 종점에서 신촌역으로 가는 버스는 2분, 시청으로 가는 버스는 3분마다 출발한다고 가정하자. 9시에 동시에 출발했을 때 9시 이후 동시에 다시 출발하는 시간을 구해보자.
\(\text{lcm}(\text{2}, \text{3}) = 6\)
연분수(Continued Fraction)는 다음과 같은 모양을 갖는 분수를 말한다. 유리수는 유현 연분수로 무리수는 무한 연분수로 표현할 수 있고, 유리수를 연분수로 고치는 대표적인 유클리드 호제법이다.
\[x = a_0 + \cfrac{1}{a_1 + \cfrac{1}{a_2 + \cfrac{1}{a_3+\,\ddots}}}\] 두 수 192와 72의 최대공약수를 구한 사례를 연분수로 나타내 보자. 몫과 나머지로 나눈다. 그리고 나서 나머지를 뒤집는다. 그러면 나머지의 분모를 다시 나눌 수가 있게 되고 이 과정을 반복하여 더이상 나눠지지 않을 때까지 반복한다.
$$ \[\begin{array}{rl} \frac{192}{72} =& 2 + \frac{48}{72} \\ =& 2 + \frac{1}{\frac{72}{48}} \\ =& 2 + \frac{1}{1+ \frac{24}{48}} \\ =& 2 + \frac{1}{1+ \frac{1}{\frac{48}{24}}} \\ =& 2 + \frac{1}{1+ \frac{1}{2}} \end{array}\]$$
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com