[include(틀:대수학)] [include(틀:정수론)] [목차] == 개요 == {{{+1 유클리드 [[互]][[除]][[法]] / Euclidean algorithm}}} 두 양의 정수, 혹은 두 다항식의 [[최대공약수]]를 구하는 방법으로, 한국의 수학 교육과정에서는 다루지 않으나(자세하게 다루지는 않지만, 2015 개정 교육과정 중학교 1학년 수학 교과서에 짤막하게 나온다).[* 그렇다고 아주 접하지 않는 건 아닌데, 사교육을 받지 않은 구세대라면 방학교재에서 봤을 것이다.] 정수론을 배우게 된다면 가장 먼저 나올 확률이 높은 공식이다. 일본의 수학 교육과정에서는 [[수학A]]로 다룬다. 하지만 여타 다른 교육과정 외 내용들이 그렇듯이 알아놓으면 몇몇 문제를 푸는데 굉장히 유용하다. 호제법(互除法)이라는 말은 서로(互) 나누기(除) 때문에 붙여진 이름이다. 이 뜻의 '호제' 라는 단어가 따로 있지는 않다. 이 [[알고리즘]]은 [[유클리드]]의 원론에 적혀있는 내용으로, 인류 '''최초'''의 알고리즘이라 한다. 알고리즘의 골자는 다음과 같다. >'''유클리드 호제법''' >---- >두 양의 정수 [math(a,b\ (a>b))]에 대하여 [math(a=bq+r\,\left(0\le r [math(\begin{aligned}a&=bq_1+r_1\,\left(0 [math(\begin{aligned}12345&=1234\cdot 10+5\\1234&=5\cdot 246+4\\5&=4\cdot 1+1\\4&=1\cdot 4\end{aligned}\\\therefore\gcd\left(12345,\ 1234\right)=1)] || [[서로소|따라서 두 수의 최대공약수는 [math(1)]]]임을 알 수 있다 (relatively prime). === 연분수 === 어떤 [[분수(수학)|분수]]를 연분수 형태로 나타낼 때에도 이 알고리즘을 사용할 수 있다. 예를 들어 [math(\dfrac{23}9)]를 연분수 형태로 바꾼다 하자. [[분자]], [[분모]]에 대해 알고리즘을 적용하면, || [math(\begin{aligned}23&=9\cdot 2+5\\9&=5\cdot 1+4\\5&=4\cdot 1+1\\4&=1\cdot 4\end{aligned})] || 여기서 몫만 따오면, [math(\dfrac{23}9=2+\cfrac1{1+\cfrac1{1+\cfrac14}})]이다. === 소스 코드 === 손으로 계산할 때는 제수와 피제수의 값 크기를 비교해서 적절하게 배열하지만 수식이나 코드로 나타낼 때는 신경쓰지 않아도 되는데, {{{ab)]를 나눈 나머지가 [math(r)]이라면 [[황금비]] [math(\tau=(1+\sqrt{5})/2)]에 대해 [math(ba/\tau)]이면 [math(r=a-b두 다항식 [math(f\left(x\right),\ g\left(x\right))]에 관하여, [math(f\left(x\right)=g\left(x\right)Q\left(x\right)+R\left(x\right))]이고 [math(0\le\deg\left(R\left(x\right)\right)<\deg\left(g\left(x\right)\right))]이라 하면, [math(\gcd\left(f,\ g\right)=\gcd\left(g,\ R\right))]이 성립한다. 증명 방법 역시 정수의 경우와 동일하므로 생략한다. 단, 이 호제법이 성립하는 것은, 어디까지나 '''유클리드 정역'''의 [[환(대수학)|환]] 위에서만이다. === 예시 === >'''문제''' >---- >두 다항식 [math(x^3-3x^2+3x-1)], [math(x^2-1)]의 최대공약수를 구하시오. >'''풀이''' >---- >{{{#!wiki style="text-align: center" [math(x^3-3x^2+3x-1=\left(x^2-1\right)\left(x-3\right)+\left(4x-4\right))]}}} >{{{#!wiki style="text-align: center" [math(x^2-1=\left(4x-4\right)\left(\dfrac{x+1}4\right))]}}} >따라서, [math(\gcd\left(x^3-3x^2+3x-1,\ x^2-1\right)=\gcd\left(x^2-1,\ 4x-4\right)=\gcd\left(4x-4,\ 0\right)=x-1)]이 처음 두 [[다항식]]의 최대공약수가 된다. 위 식에서는 원래 나머지를 비교하는 것이기에 [math(x=1)] 또는 [math(x=-1)]를 넣어서 풀면 쉽게 풀린다. == [[유한체]]에서[anchor(확장된 유클리드 호제법)] == [[시계 산술]]을 쓰는 [[유한체]]에서는 [[나눗셈]]의 정의를 다르게 정의해야 하는데, 이때 사용되는 것이 '확장된 유클리드 호제법'으로, 다음과 같이 정의된다. >[math(\alpha x+\beta y=\gcd(\alpha,\,\beta))] 이 방법을 이용해서 해당 정수의 '[[역수]]'[* [[유리수|유리수체]]에서의 역수와는 다르다. 유리수체에서의 정수의 역수는 1보다 작을 수 밖에 없는데, 유한체의 역수는 유한체 내부의 원소여야 하기 때문에 1보다 클 수 밖에 없다. 예를 들어서 5를 법으로 하는 유한체의 경우, 1의 역원은 1이지만 2의 역원은 3, 3의 역원은 2, 4의 역원은 4 자기 자신이 된다.]를 구한 뒤, 피제수에 곱하는 것을 유한체의 '나눗셈'으로 정의한다. == 관련 문서 == * [[최대공약수]] * [[나눗셈 정리]] * [[나머지 정리]] * [[베주 항등식]] [[분류:정수론]][[분류:대수학]][[분류:알고리즘]]