개발/Algorithm

[유클리드 호제법] Euclidean algorithm

개발 여행 2021. 9. 9. 20:05
728x90

유클리드 호제법 (유클리드 알고리즘)은 2개의 자연수의 최대공약수를 구하는 알고리즘이다.

 

출처 - 나무위키

* 최대공약수 : GCD(Greatest Common Divisor)

 


 

양의 정수 A, B가 존재하고 A가 B보다 크다는 전제하에 A를 B로 나눈 나머지를 r이라고 칭한다.

 

이때 A와 B의 최대공약수B와 r 사이의 최대공약수와 같다.

이것이 유클리드 호제법이다.


그 이유를 살펴보자!

 

A는 어떤 수 * 최대공약수, B는 어떤 수 * 최대공약수로 나타낼 수 있다.

즉 아래와 같이 나타낼 수 있다.

(최대공약수이기 때문에 더 이상 약수는 존재하지 않아야 하므로 a와 b는 서로소이다.)

 

 

여기서 증명해야 할 것은

 

A와 B의 최대공약수는 G이므로

A를 B로 나눈 나머지가 r이었을 때, B와 r의 최대공약수도 G인지 확인해야 할 것이다.

 

 

 

위에서 A를 B로 나눈 몫은 q, 나머지는 r이라고 나타냈다.

A는 아래와 같이 나타낼 수 있다. A는 몫(q) * B + 나머지(r)이다.

 

A, B를 최대공약수로 나타냈을 때의 식을 대입해보면

아래와 같이 나타낼 수 있다.

 

여기서 r과 B 사이의 최대공약수가 여전히 G인 것을 확인할 수 있다.

(a – q·b) 와 b가 서로소임을 보이면 된다.

공통되는 약수가 없으면 r과 B의 최대공약수도 G가 되기 때문이다.


(a – q·b)b서로소인 것을 증명하기 위해서

결과를 부정하는 귀류법을 사용한다.

 

만약 (a – q·b) 와 b가 서로소가 아니라면

a-q·b = xn,

b = yn

으로 나타낼 수 있다.

서로소가 아니기 때문에 공통인 약수 n을 가지고 있을 것이다. 

 

a-q·b = xn

식에서

byn을 대입하면

 

a-q·yn = xn

즉, a = (yq + x)n으로 정리할 수 있다.

 

이때, b = yn

b는 여전히 yn이다.

 

a ((yq + x)n)와 b (yn)는 n이라는 공약수가 존재하게 되므로

a와 b는 서로소가 아니게 된다.

즉, a와 b는 서로소이다라는 전제에 위배된다.

 

따라서 귀류법을 통해 a와 b가 서로소임을 증명한 것이다.

 

728x90