유클리드 호제법
두 정수 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의 어떤 정수 계수 조합으로 이루어져 있다. 식으로 표현하면 항상 다음이 성립한다:
rᵢ = sᵢ·a + tᵢ·ba와 b의 정수 계수 결합(integer linear combination)으로 표현 가능하다고도 표현한다.
단계별로 확인해 보면, 패턴이 반복적으로 유지된다.
-
첫 번째 단계
a = b·q₀ + r₀정리하면r₀ = a - b·q₀즉,r₀ = 1·a + (-q₀)·b따라서s₀ = 1,t₀ = -q₀ -
두 번째 단계
b = r₀·q₁ + r₁정리하면r₁ = b - q₁·r₀그런데 위에서 r₀ = a - b·q₀ 이므로r₁ = b - q₁(a - b·q₀)= (-q₁)·a + (1 + q₀·q₁)·b즉,s₁ = -q₁,t₁ = 1 + q₀·q₁ -
일반화 (귀납 단계)
각 단계의 나눗셈은 다음과 같다:
r₍ᵢ₋₂₎ = qᵢ·r₍ᵢ₋₁₎ + rᵢ정리하면:rᵢ = r₍ᵢ₋₂₎ - qᵢ·r₍ᵢ₋₁₎귀납 가정으로, 이전 두 항은 이미 a, b의 선형결합이라 하자:
r₍ᵢ₋₁₎ = s₍ᵢ₋₁₎·a + t₍ᵢ₋₁₎·br₍ᵢ₋₂₎ = s₍ᵢ₋₂₎·a + t₍ᵢ₋₂₎·b이를 위 식에 대입하면:
rᵢ = (s₍ᵢ₋₂₎ - qᵢ·s₍ᵢ₋₁₎)·a + (t₍ᵢ₋₂₎ - qᵢ·t₍ᵢ₋₁₎)·b즉,
sᵢ = s₍ᵢ₋₂₎ - qᵢ·s₍ᵢ₋₁₎tᵢ = t₍ᵢ₋₂₎ - qᵢ·t₍ᵢ₋₁₎이 된다.
이제 위의 귀납식을 반복문으로 구현할 수 있다.
-
초기 값
r₀ = a s₀ = 1 t₀ = 0r₁ = b s₁ = 0 t₁ = 1이후 r₍ᵢ₋₁₎ 이 0이 될 때까지 반복한다.
q = r₍ᵢ₋₁₎ // rᵢr₍ᵢ₊₁₎ = r₍ᵢ₋₁₎ − q·rᵢs₍ᵢ₊₁₎ = s₍ᵢ₋₁₎ − q·sᵢt₍ᵢ₊₁₎ = t₍ᵢ₋₁₎ − q·tᵢ
마지막으로 남은 r(i) 가 gcd(a, b)이고, 그때의 s(i)와 t(i)가 바로 베주 항등식의 해 x, y가 된다.
a·sᵢ + b·tᵢ = rᵢ = gcd(a, b)예시
1071, 1029 유클리드 나눗셈 과정:
1071 = 1029×1 + 421029 = 42×24 + 2142 = 21×2 + 0gcd(1071, 1029) = 21
1071×(−24) + 1029×25 = 21x = −24, y = 25