티스토리 뷰

1) 중국인의 나머지 정리

중국인의 나머지 정리는 PS를 하면서 간혹 등장한다. 답이 큰 경우 일반적으로 M으로 나눈 나머지를 출력하라고 한다. 하지만 이 M이 고정되어 있지 않고, 입력으로 k가지가 주어진다고 할 경우 k 개 경우에 대해서 매번 다 계산하면 오래걸린다. 이럴 때 필요한 것이 바로 중국인의 나머지 정리다.

 

정리)

서로소인 k개의 자연수 n1,n2,,nk와 임의의 정수 a1,a2,,ak가 있을 때, 임의의 i(1ik)에 대해 xai(modni) 로 표현되는 변수 x의 연립 합동 방정식에 대해, 이 방정식이 성립하는 해 x=a가 항상 존재하며, n1n2nk 모듈로 안에서 유일하다. 즉, 이 방정식의 해는 xa(modn1n2nk)로 표현 가능하다.

 

증명과 계산 방법)

N=n1n2nk 라고 하자. N/nini와 서로소이기 때문에, rini+si(N/ni)=1인 정수 ri,si가 항상 존재한다. (확장 유클리드) 여기에서, ei=si(N/ni)라고 하면 아래와 같은 등식이 성립한다.

 

ei1(modni)

ei0(modnj)(ij)

 

여기에서 a=ki=1aiei라고 하면, 임의의 i에 대해 aai(modni)가 성립한다. 즉, a는 우리가 구하고자 하는 해 중 하나이다.

 

이제 a의 N 모듈로 안에서 유일성을 증명하기 위해, 두 해 x,y가 존재한다고 가정하자. 그러면 xai,yai(modni) 이므로 xy는 모든 ni의 배수이고, 따라서 N의 배수이다. 즉, xy(modN)이므로 해가 유일하다는 것이 증명된다.

 

2) 일반적인 상황에서 연립 합동 방정식의 해 구하기

변수 x에 대한 연립 합동 방정식이 두 개 있다고 하자.

xa1modm1xa2modm2

이 방정식의 해 x가 존재한다면, 다음과 같다. x=k1m1+a1=k2m2+a2. 이 식은 다음과 같이 정리할 수 있다.

k1m1k2m2=a2a1

m1m2의 최대공약수를 g라고 하자. 만약 두 수가 서로소라면 g=1이다. 위 식을 만족하는 정수 k1k2가 존재하기 위한 필요충분조건은 a2a1g의 배수여야 한다. (확장 유클리드 알고리즘)

k1k2의 정수해는 여러 쌍이 있을 수 있다. 그중 k1의 임의의 해를 k0라 하자. 확장 유클리드 알고리즘을 통해 k0를 구할 수 있다.

k1의 일반해는 다음과 같이 표현할 수 있다.

k1=k0+lm2g

즉, k1의 정수해는 modm2g에서 유일하다. 이를 x=k1m1+a1에 대입하면 다음과 같다.

x=k0m1+lm1m2g+a1

즉, x의 해가 modm1m2g에서 유일하며, 그 해는 다음과 같다.

xk0m1+a1modm1m2g

 

3) 확장 유클리드 알고리즘

확장 유클리드 알고리즘은 모듈로 안에서 곱셈에 대한 역원을 구할 때나, 앞에서 설명한 중국인의 나머지 정리에서 해를 구할 때 사용된다.

 

이에 대해 간략하게 설명하면 임의의 정수 a,b에 대하여 gcd(a,b)=ax+by을 만족하는 x,y가 항상 존재한다는 것이다. 이 때, xy를 구할 수 있다.

 

곱셈의 역원)

M 모듈로 안에서 n의 곱셈에 대한 역원이란, ns1(modM)을 만족하는 s를 의미하며, nM이 서로소일 때 존재한다. 확장 유클리드 알고리즘에서의 식에 n,M,s를 대입하면 gcd(n,M)=xM+ns 를 만족하는 x,s가 존재하며, gcd(n,M)=1일 때 sM 모듈로 안에서 n의 곱셈에 대한 역원이 된다.

 

구하는 방법)

코드 보기
1
int ee(int a,int b,int &s,int &t) {     if (!b){        s = 1, t = 0;       return a;   }   int q = a/b, r = a%b, sp, tp;   int g = ee(b,r,sp,tp);  s = tp; t = sp-tp*q;    return g; }

 

'공부' 카테고리의 다른 글

Suffix Array와 LCP  (14) 2014.08.14
Manacher's Algorithm  (0) 2014.08.13
고속 푸리에 변환 (Fast Fourier Theorem, FFT)  (9) 2014.07.25
포함-배제의 원리  (0) 2014.07.20
Nim game  (18) 2013.07.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함