Joonas' Note
확장 유클리드 알고리즘으로 나머지 연산의 곱셈 역원 구하기 본문
- 초기 조건
- 진행
- 나머지 연산의 곱셈 역원
확장 유클리드 알고리즘(Extended Euclidian Algorithm)은 유클리드 호제법을 확장한 것이다.
as+bt=gcd(a,b)을 만족하는 정수 s, t 짝을 찾아낼 수 있다.
증명은 생략하고 어떻게 사용하는가를 적어볼까 한다.
초기 조건
s0=1,s1=0, t0=0,t1=1, r0=a,r1=b
진행
qi←⌊ ri−1 / ri ⌋(i≥1)ri← ri−2−ri−1⋅qi−1(i≥2)si← si−2−si−1⋅qi−1ti← ti−2−ti−1⋅qi−1
가만보면 r,s,t가 전부 똑같은 방식으로 처리되는 걸 알 수 있다. 이걸 표를 그려서 전개해보면 외우기도 쉽고 과정도 잘 보여서 좋다.
ri← ri−2−ri−1⋅qi−1 라고 되어있는데, 그냥 ri−2 mod ri−1 즉, 나눈 나머지로 계산하면 편하다. (이때는 a≥b이여야함)
아래 표를 작성하고 숫자만 채울 준비를 하자.
si | ti | ri | qi | |
i=0 | 1 | 0 | a | |
i=1 | 0 | 1 | b | ⌊ a / b ⌋ |
a mod b |
적당한 예시로 15s+6t=3 를 만족시키는 s,t를 찾아보자.
이전에 구한 값을 노란색으로 색칠하고, 노란색을 통해 계산한 값을 파란색으로 칠했다.
si | ti | ri | qi | |
i=0 | 1 | 0 | a=15 | |
i=1 | 0 | 1 | b=6 | ⌊ 15 / 6⌋=2 |
i=2 | 1−0∗2=1 | 0−1∗2=−2 | 15 mod 6=3 | |
i=3 |
위 표에서 우린 다음 q2와 r3을 얻을 수 있다. 이걸로 다시 또 s3,t3을 찾을 수 있고 계속 반복한다.
si | ti | ri | qi | |
i=0 | 1 | 0 | a=15 | |
i=1 | 0 | 1 | b=6 | 2 |
i=2 | 1 | −2 | 3 | ⌊ 6 / 3 ⌋=2 |
i=3 | 6 mod 3=0 |
r이 0이 되는 순간 우린 나머지가 0이 되는, 즉 식이 나누어 떨어지는 s,t를 찾았다는 의미이다. 그래서 노란색으로 색칠된 값들이 우리가 구하고자 했던 답이다.
언제나 검산은 옳다. 검산해보면 15s+6t = 15⋅1+6⋅(−2) = 15−12 =3 인 것을 확인할 수 있다.
나머지 연산의 곱셈 역원
확장 유클리드 알고리즘으로 모듈러에서 곱셈의 역원도 구할 수 있다!
우선 곱셈의 역원이 존재한다는 것은 두 수가 서로소라는 건데, a⋅s≡1 (mod p) 를 만족시키는 s를 찾을 수 있다는 의미이다.
그럼 다음 식이 가능하다는 의미이다.
if gcd(a,p)=1, a⋅s≡1 (mod p)∴
우린 a와 p를 알고 있으니 확장 유클리드 알고리즘으로 원하던 s를 구할 수 있다. 한 가지 주의할 점(?)이라면 s 는 음수가 될 수도 있다는 것이다. 양수인 곱셈의 역원만 구하고 싶다면, s_{result} \leftarrow (s_{result} + p)~mod~p를 하면 된다.
'알고리즘' 카테고리의 다른 글
실시간 평균 (Moving Average; 이동 평균) (2) | 2020.01.13 |
---|---|
[코딩으로 풀어보기] 문제적 남자 195화 ROUND 5, 규칙에 맞게 화살표를 색칠하라. (0) | 2019.12.19 |
맞왜틀 피하기 (자주 하는 실수 모음) (4) | 2019.12.13 |
[코딩으로 풀어보기] 문제적 남자 180화, 마방진에서 나는 8, 우리는 71일 때 너는? (2) | 2019.12.04 |
중국인의 나머지 정리 - 이해하기 쉬운 설명 (8) | 2017.10.31 |