유클리드 호제법
두 정수 a를 b로 나눈 값을 아래처럼 표현하면 (a ≥ b)
a = bq + r (단, 0 ≤ r < b)다음 정리가 성립한다.
(a, b) = (b, r)즉, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이 성질을 나머지가 0이 될 때까지 반복하면 마지막에 남는 0이 아닌 수가 gcd(a, b)이다.
-
예시
(1071, 1029)= (1029, 42)= (42, 21)= (21, 0)= 21따라서
gcd(1071, 1029) = 21
증명
a,b ∈ Z 이고 a ≥ b 라 하자.
-
두 정수 a를 b로 나눈 값을 아래처럼 표현할 수 있다.
a = bq + r, 0 ≤ r < b -
(a, b) = d라고 하고,a = dα,b = dβ라 해보자.-
이때 α, β 는 서로소이다. (a와 b의 최대공약수인 d로 a와 b를 나눈 몫들은 더 이상 공약수를 가질 수 없기 때문이다.)
-
a = bq + r에 대입하면d·α = d·β·q + rr = d(α − β·q) -
따라서
d | r(d는 r의 약수이다). -
d는 b와 r의 공약수이므로
(b, r) ≥ d이다.
-
-
(b, r) = c라 하고b = cβ′, r = cρ라 해보자.-
a = bq + r = cβq + cp = c(β′q + ρ) -
따라서
c | r(c는 r의 약수이다). -
따라서 c는 a, b의 공약수이며,
(a, b) ≥ c이다.
-
-
결국
(a, b) = (b, r)가 성립한다. -
즉, 어떤 수가 a와 b를 나누면
r = a − bq도 나누고, 반대로 b와 r을 나누는 수는 a도 나눈다.
확장 유클리드 호제법 (Extended Euclidean Algorithm)
확장 유클리드 알고리즘은 유클리드 호제법을 수행하면서 베주 항등식의 x, y 를 함께 계산하는 방법이다.
베주 항등식, Bézout’s identity
- 임의의 정수 a, b 에 대해 gcd(a, b) = g 라 하면,
- 정수 x, y 가 존재하여 다음이 성립한다.
a·x + b·y = g베주 항등식의 존재 증명 (귀납적 구성)
유클리드 알고리즘 과정을 다음과 같이 나타낸다.
유클리드 알고리즘의 과정을 다음과 같이 나타내자.
a = bq₀ + r₀b = r₀q₁ + r₁r₀ = r₁q₂ + r₂⋯r₍ₖ₋₂₎ = r₍ₖ₋₁₎qₖ + rₖr₍ₖ₋₁₎ = rₖq₍ₖ₊₁₎ + 0- 마지막에 나온 나머지 rₖ 가 바로 gcd(a, b) = g 이다.
- 각 단계의 나머지 rᵢ 는 항상 a와 b의 정수 계수 결합(integer linear combination) 으로 표현될 수 있다.
r₀ = a − bq₀ = 1·a + (−q₀)·b
즉, r₀ = s₀·a + t₀·b (여기서 s₀ = 1, t₀ = −q₀)
⸻
🔹 다음 단계
r₁ = b − r₀q₁ = b − q₁(a − bq₀) = (−q₁)·a + (1 + q₀q₁)·b따라서 r₁ = s₁·a + t₁·b (여기서 s₁ = −q₁, t₁ = 1 + q₀q₁)
⸻
🔹 귀납적 단계
유클리드 알고리즘의 일반식은
r₍ᵢ₋₂₎ = r₍ᵢ₋₁₎qᵢ + rᵢ
이므로, 이를 정리하면
rᵢ = r₍ᵢ₋₂₎ − qᵢ·r₍ᵢ₋₁₎
앞서 귀납 가정으로 r₍ᵢ₋₁₎ = s₍ᵢ₋₁₎·a + t₍ᵢ₋₁₎·b, r₍ᵢ₋₂₎ = s₍ᵢ₋₂₎·a + t₍ᵢ₋₂₎·b 라 하면, 라 하면,
rᵢ = (s₍ᵢ₋₂₎·a + t₍ᵢ₋₂₎·b) − qᵢ(s₍ᵢ₋₁₎·a + t₍ᵢ₋₁₎·b) = (s₍ᵢ₋₂₎ − qᵢ·s₍ᵢ₋₁₎)·a + (t₍ᵢ₋₂₎ − qᵢ·t₍ᵢ₋₁₎)·b
즉, rᵢ = sᵢ·a + tᵢ·b sᵢ = s₍ᵢ₋₂₎ − qᵢ·s₍ᵢ₋₁₎ tᵢ = t₍ᵢ₋₂₎ − qᵢ·t₍ᵢ₋₁₎
이 귀납적으로 성립한다.
⸻
🔹 결론
마지막 단계에서 r_k = \gcd(a, b) = g 이므로,
r_k = s_k·a + t_k·b
따라서
\boxed{a·x + b·y = g}
을 만족하는 정수 x = s_k,, y = t_k 가 존재한다.
확장 유클리드 알고리즘 (반복 형태)
다음 불변식을 유지하면서 gcd와 베주 계수를 함께 계산할 수 있다.
초기값:
r0 = a, s0 = 1, t0 = 0r1 = b, s1 = 0, t1 = 1반복식:
q = r(i−1) // r(i)r(i+1) = r(i−1) − q·r(i)s(i+1) = s(i−1) − q·s(i)t(i+1) = t(i−1) − q·t(i)r(i+1) = 0 이 되면 반복을 중단한다.
이때 gcd(a, b) = r(i), 그리고 a·s(i) + b·t(i) = r(i)가 성립한다.
예시
1071, 1029 유클리드 나눗셈 과정:
1071 = 1029×1 + 421029 = 42×24 + 2142 = 21×2 + 0gcd(1071, 1029) = 21
1071×(−24) + 1029×25 = 21x = −24, y = 25