확장 유클리드 알고리즘으로 나머지 연산의 곱셈 역원 구하기

Joonas' Note

확장 유클리드 알고리즘으로 나머지 연산의 곱셈 역원 구하기 본문

알고리즘

확장 유클리드 알고리즘으로 나머지 연산의 곱셈 역원 구하기

2017. 11. 1. 16:05 joonas 읽는데 2분
  • 초기 조건
  • 진행
  • 나머지 연산의 곱셈 역원

확장 유클리드 알고리즘(Extended Euclidian Algorithm)은 유클리드 호제법을 확장한 것이다.

as+bt=gcd(a,b)을 만족하는 정수 s, t 짝을 찾아낼 수 있다.

증명은 생략하고 어떻게 사용하는가를 적어볼까 한다.

초기 조건

s0=1,s1=0,  t0=0,t1=1,  r0=a,r1=b

진행

qi ri1 / ri (i1)ri ri2ri1qi1(i2)si si2si1qi1ti ti2ti1qi1

가만보면 r,s,t가 전부 똑같은 방식으로 처리되는 걸 알 수 있다. 이걸 표를 그려서 전개해보면 외우기도 쉽고 과정도 잘 보여서 좋다.

ri ri2ri1qi1 라고 되어있는데, 그냥 ri2 mod ri1 즉, 나눈 나머지로 계산하면 편하다. (이때는 ab이여야함)

아래 표를 작성하고 숫자만 채울 준비를 하자.

   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 102=1 012=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 = 151+6(2) = 1512 =3 인 것을 확인할 수 있다.

나머지 연산의 곱셈 역원

확장 유클리드 알고리즘으로 모듈러에서 곱셈의 역원도 구할 수 있다!
우선 곱셈의 역원이 존재한다는 것은 두 수가 서로소라는 건데, as1 (mod p) 를 만족시키는 s를 찾을 수 있다는 의미이다.

그럼 다음 식이 가능하다는 의미이다.

if gcd(a,p)=1,  as1 (mod p)

우린 ap를 알고 있으니 확장 유클리드 알고리즘으로 원하던 s를 구할 수 있다. 한 가지 주의할 점(?)이라면 s 는 음수가 될 수도 있다는 것이다. 양수인 곱셈의 역원만 구하고 싶다면, s_{result} \leftarrow (s_{result} + p)~mod~p를 하면 된다.

Comments