기존의 유클리드 호제법의 목적은 두 수의 최대 공약수를 구하는 것이었습니다. 이와 다르게 확장 유클리드 호제법의 목적은 방정식의 해를 구하는 것입니다.
해를 구하고자 하는 방정식
ax + by = c (a,b,c,x,y는 정수)
이 때 위 방정식은 c % gcd(a,b) = 0인 경우에만 정수해를 갖습니다. 다시 말하면 c가 a와 b의 최대 공약수의 배수인 경우에만 정수해를 갖습니다.
이는 ax + by = c가 정수해를 갖게 하는 c의 최솟값은 gcd(a,b) 라는 것을 의미합니다.
확장 유클리드 호제법은 재귀함수를 사용하여 구현합니다.
5x + 9y = 2 인 경우, 이 식을 만족하는 정수 x,y 구하는 알고리즘 구현
gcd(a,b) = c(최솟값)
a = 5, b = 9, c = 1
5%9 = 나머지 : 5, 몫 : 0;
9%5 = 나머지 : 4, 몫 : 1;
5%4 = 나머지 : 1, 몫 : 1;
4%1 = 나머지 : 0, 몫 : 4;
역계산을 통해 x,y값을 유추
x = y'
y = x' - y' * q
이전 x = 1, y = 0
1st x = 0, y = 1 - 0 * 4 = 1
2nd x = 1, y = 0 - 1 * 1 = -1
3rd x = -1, y = 1 - ( -1 * 1) = 2
4th x = 2, y = -1 - (2 * 0) = -1
x = 2, y = -1
2 / gcd(5,9) = 2/1 = 2 = K
Kx Ky - x : 4, y : -2