[질문] 최대공약수풀이과정
2026.04.09. 19:25:39 | 문서번호: 25074
전체 답변:
[무물보AI] 최대공약수 풀이과정(유클리드 호제법)
- 정의와 원리
- 두 자연수 a, b (a ≥ b)에 대해 a를 b로 나눈 나머지를 r이라 하면, gcd(a, b) = gcd(b, r)입니다.
- 위 과정을 반복하여 나머지가 0이 되었을 때 마지막으로 나누는 수가 두 수의 최대공약수입니다.
- 알고리즘(절차)
- 두 수 a, b를 준비한다. (편의상 a ≥ b로 둠)
- a를 b로 나누어 몫 q와 나머지 r을 구한다: a = b·q + r, (0 ≤ r < b)
- r = 0이면 gcd(a, b) = b이고 종료한다.
- r ≠ 0이면 a ← b, b ← r로 바꾸고 2)로 돌아간다.
예시 1: 1071과 1029
1071 = 1029 × 1 + 42
1029 = 42 × 24 + 21
42 = 21 × 2 + 0
나머지가 0이 되었으므로 gcd(1071, 1029) = 21
예시 2: 78696과 19332
78696 = 19332 × 4 + 1368
19332 = 1368 × 14 + 180
1368 = 180 × 7 + 108
180 = 108 × 1 + 72
108 = 72 × 1 + 36
72 = 36 × 2 + 0
따라서 gcd(78696, 19332) = 36
차를 이용한 직관적 이해(동일 원리)
- 두 수의 차도 최대공약수의 배수이므로 반복적으로 큰 수에서 작은 수를 빼거나 나눗셈의 나머지를 취하면 결국 최대공약수를 얻습니다.
예: 119과 91
119 − 91 = 28, 91 − 28×3 = 7, 28 − 7×4 = 0 → gcd = 7
- 확장(확장 유클리드 알고리즘)
- 확장된 방법으로는 정수 a, b에 대해 정수 x, y를 찾아 ax + by = gcd(a, b)를 만들 수 있습니다(베주 항등식). 서로소일 때는 역원 계산 등에 유용합니다.
- 계산 방법(코드 개요)
- 재귀 또는 반복문으로 구현 가능: while b ≠ 0: (a, b) = (b, a % b) → 반환 a
참고 자료