확장 유클리드 호제법 예제 - 1
문제 분석
확장 유클리드 호제법을 그대로 구현하면 되는 문제다.
손으로 풀어보기
C의 값이 A와 B의 최대 공약수의 배수 형태인지 확인한다. 최대 공약수의 배수 형태라면 C의 값을 최대 공약수로 변경한다. 최대 공약수의 배수 형태가 아니라면 -1을 출력하고 프로그램을 종료한다.
3x + 4y = 5일 때, 3과 4의 최대 공약수는 1고, 5는 1의 배수이므로 C를 1로 변경한다. ->3x + 4y = 1
A와 B에 관해 나머지가 0이 나올 때까지 유클리드 호제법을 수행한다.
유클리드 호제법 실행
나머지
몫
3 % 4 = 3
3
0
4 % 3 = 1
1
1
3 % 1 = 0
0
3
나머지가 0이 나오면 x = 1, y = 0으로 설정한 후 과정 2에서 구한 몫들을 식(
x = y', y = x' - y' * 몫)에 대입하면서 역순으로 계산한다.
나머지
몫
x = y', y = x' - y' * q 역순 계산
3
0
X = -1, Y = 1 - (-1 * 0) = 1 , 계산 순서: 3
1
1
X = 1, Y = 0 - (1 * 1) = -1 , 계산 순서: 2
0
3
X = 0, Y = 1 - (0 * 3) = 1 , 계산 순서: 1
최종으로 계산된 x, y값에 C를 x와 y의 최대공약수로 나눈 값을 각각 곱해 방정식의 해를 구할 수 있다.
몫 =
5 / gcd(a, b)=5 / 1 = 5,x = -1 * 5 = -5,y = 1 * 5 = 5x = -5
y = 5
슈도코드
코드 구현 - 파이썬
코드 구현 - 자바
Last updated