유클리드 호제법(Euclidean algorithm)은 두 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘이다. '호제법(互除法)'이란 두 수가 서로(互) 상대방을 나누어(除) 결국 원하는 수를 얻는다는 뜻에서 유래했다. 2개의 자연수 a,ba, b에 대하여 aabb로 나눈 나머지를 rr이라 하면, aabb의 최대공약수는 bbrr의 최대공약수와 같다는 성질을 이용한다. 이 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 곧 최대공약수이다.

배너 광고

개요 및 어원

유클리드 호제법은 두 수의 최대공약수를 효율적으로 구하는 방법이다. '호제법'이라는 용어 외에 두 정수를 연속적으로 나눈다는 의미에서 **연제법(連除法)**이라고도 부른다. 일반적으로 숫자가 커질수록 소인수분해를 통해 최대공약수를 찾기 어려워지는데, 호제법을 이용하면 큰 수의 계산도 비교적 빠르게 수행할 수 있다.

유클리드 호제법을 이용한 최대공약수 계산 과정
두 수의 최대공약수를 구하기 위해 나머지를 반복적으로 이용하는 유클리드 호제법의 계산 과정유클리드 호제법, 유클리드 알고리즘(Euclid algorithms)

역사적 배경

이 알고리즘은 기원전 300년경 고대 그리스의 수학자 유클리드가 집필한 《원론》 제7권(명제 1~3)과 제10권에 명시적으로 기술되어 있다. 이는 인류 역사상 가장 오래된 알고리즘으로 평가받는다. 다만 유클리드가 이를 처음 발견한 것은 아니며, 그 이전인 기원전 375년경 에우독소스나 피타고라스 학파에서 이미 사용하던 정수론 지식을 유클리드가 정리하여 기록한 것으로 추정된다.

알고리즘 원리

두 양의 정수 a,ba, b (a>ba > b)에 대하여 다음과 같은 정리가 성립한다.

a=bq+r(0r<b)a = bq + r \quad (0 \le r < b)

이때 aabb의 최대공약수는 bbrr의 최대공약수와 같다. 즉, gcd(a,b)=gcd(b,r)\gcd(a, b) = \gcd(b, r)이다. 이 과정을 나머지가 0이 될 때까지 반복하면 마지막에 나누는 수가 최대공약수가 된다.

증명

gcd(a,b)=G\gcd(a, b) = G라 하면, a=GA,b=GBa = GA, b = GB (단, A,BA, B는 서로소)로 나타낼 수 있다. 이를 r=abqr = a - bq에 대입하면 r=GAGBq=G(ABq)r = GA - GBq = G(A - Bq)가 된다. 따라서 GGrr의 약수이기도 하므로 bbrr의 공약수이다. 이때 BBABqA - Bq가 서로소임을 증명하면 GGbbrr의 최대공약수임이 확정된다.

계산 예시

1071과 1029의 최대공약수를 구하는 과정은 다음과 같다.

  1. 1071을 1029로 나누면 나머지는 42이다. (1071=1029×1+421071 = 1029 \times 1 + 42)
  2. 1029를 42로 나누면 나머지는 21이다. (1029=42×24+211029 = 42 \times 24 + 21)
  3. 42를 21로 나누면 나머지는 0이다. (42=21×2+042 = 21 \times 2 + 0)

나머지가 0이 되었을 때 나누는 수인 21이 1071과 1029의 최대공약수이다.

프로그래밍 구현

현대 컴퓨터 과학에서 유클리드 호제법은 재귀 함수나 반복문을 통해 간단히 구현된다.

방식Python 예시 코드
반복문def gcd(a, b): while b: a, b = b, a % b; return a
재귀def gcd(a, b): return a if b == 0 else gcd(b, a % b)

응용 및 확장

유클리드 호제법은 단순히 최대공약수를 구하는 것 이상의 용도로 활용된다.

  • 최소공배수(LCM): 두 수 a,ba, b의 곱을 최대공약수로 나누면 최소공배수를 얻을 수 있다. (LCM(a,b)=(a×b)/GCD(a,b)LCM(a, b) = (a \times b) / GCD(a, b))
  • 서로소 판별: 최대공약수가 1이면 두 수는 서로소이다.
  • 확장 유클리드 알고리즘: ax+by=gcd(a,b)ax + by = \gcd(a, b)를 만족하는 정수 x,yx, y를 찾는 데 사용되며, 이는 암호학(RSA 등)에서 모듈러 역수를 구하는 데 필수적이다.
  • 기약분수: 분자와 분모를 최대공약수로 나누어 분수를 단순화할 수 있다.

참고 자료

5
유클리드 호제법유클리드 호제법 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b…https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95유클리드 호제법 - 우만위키유클리드 호제법 - 우만위키 # 유클리드 호제법 - 상위 항목: 수학, 수학 관련 정보, 정수론 Euclidean Algorithm ## 1 개요 두 양의 정수, 혹은 두 다항식의 최대공약수를 구하는 방법으로, 한국의 수학 교육과정에서는 다루지 않는다. 하지만 여타 다른 교육과정 외 내용들이 그렇듯이 알아놓으면 몇몇 문…https://tcatmon.com/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95유클리드 호제법 - 읽기전용위키유클리드 호제법 - 읽기전용위키 # 유클리드 호제법 ## 1. 개요 --- Euclidean Algorithm · — 互 除 法두 양의 정수, 혹은 두 다항식의 최대공약수를 구하는 방법으로, 한국의 수학 교육과정에서는 다루지 않는다(자세하게 다루지는 않지만, 2015 개정 교육과정 중학교 1학년 수학 교과서에 짤막하게…https://readonly.wiki/w/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C%20%ED%98%B8%EC%A0%9C%EB%B2%95호제법호제법 메인 메뉴로 바로가기 주제분류 메뉴로 바로가기 본문으로 바로가기 --- ## 호제법 유클리드 호제법(互除法)은 두 개 이상의 양의 정수의 최대공약수를 구하는 방법으로, 유클리드 알고리즘(Euclidean algorithm)이라고 하기도 한다. 호제법이라는 이름은, 주어진 두 정수의 최대공약수를 구하기 위해 두 수…https://terms.naver.com/entry.naver?docId=3338353유클리드 호제법을 통해 두 수의 최대공배수, 서로소, 기약분수, 유한소수 판별하기 | zerozoo-a의 블로그유클리드 호제법을 통해 두 수의 최대공배수, 서로소, 기약분수, 유한소수 판별하기 | zerozoo-a의 블로그 # 유클리드 호제법을 통해 두 수의 최대공배수, 서로소, 기약분수, 유한소수 판별하기 - 01 July 2024 - 최대공배수 gcd - 서로소 disjoint - 기약분수 reduced fraction #…https://zerozoo-a.github.io/blog/algos/O(log)/Euclidean-algorithm/

관련 문서