선형합동
Linear Congruences
선형합동
Linear Congruences
A congruence of the form ax≡b (modm), where m is a positive integer, a and b are integers, and x is a variable, is called a linear congruence.
- 양의 정수 m, 정수 a,b 에 대하여,
- ax≡b (modm) 형태의 합동을 선형합동(linear congruence)이라 부른다.
a 모듈로 m 의 역 (inverse)
- ˉaa≡1 (modm) 인 정수 a가 존재한다면,
- 정수 ˉa를 a 모듈로 m의 역(inverse)이라 부른다.
If a and m are relatively prime integers and m>1, then an inverse of a modulo m exists. Furthermore, this inverse is unique modulo m. (That is, there is a unique positive integer ˉa less than m that is an inverse of a modulo m and every other inverse of a modulo m is congruent to ˉa modulo m.)
- ˉaa≡1 (modm) 에 대하여
- a,m 이 서로소이고 m>1 이면
- a 모듈로 m의 역이 존재한다.
- 이런 경우, 0<ˉa<m인 a 모듈로 m의 역 ˉa는 하나 밖에 없다.
- 그 외의 다른 모든 a 모듈로 m 의 역은 ˉa 모듈로 m과 합동이다.
- a,m 이 서로소이고 m>1 이면
예를 보며 이해하자.
- ˉa×2≡1(mod5).
- 2와 5는 서로소이고 5>1 이므로, '2 모듈로 5'의 역 ˉa는 존재한다.
- 정수 3, 8, 13, 18, … 등은 '2 모듈로 5의 역'이다.
- m=5 보다 작은 '2 모듈로 5의 역' 은 3 하나뿐이다.
예제 1
ˉa×3=1 (mod7)베주의 계수를 찾는 방법으로, 3 modulo 7 의 역을 찾아라.
- 3과 7의 최대공약수는 1이다.
- 2×3+1=7 이므로
- 베주의 항등식으로 표현하면 gcd(3,7)=1=−2×3+1×7
- 따라서 베주의 계수는 −2,1이다.
- 잘 살펴보면 3 modulo 7 의 역이 −2 라는 것을 알 수 있다.
- 0보다 크고 m 보다 작은 역은 5 이다.
예제 2
ˉa×101=1 (mod4620)101 모듈로 4620 의 역을 찾아라.
먼저 유클리드 호제법을 사용해 gcd(101,4620)을 찾자.
4620=45×101+75101=1×75+2675=2×26+2326=1×23+323=7×3+23=1×2+12=2×1∴gcd(101,4620)=1베주의 항등식을 만들자.
1=s×101+t×4620형태가 나오도록 위의 호제법 과정의 계산식을 적당히 가져다 끼워 맞추면 된다.
1=3−1×2=3−2 (2 제거) =3−(23−7×3)=−23+8×3=−23+8×(26−23) (3 제거) =−9×23+8×26=−9×(75−2×26)+8×26 (23 제거) =−9×75+26×26=−9×75+26×(101−75) (26 제거) =−35×75+26×101=−35×(4620−45×101)+26×101 (75 제거) =−35×4620+(−35×−45+26)×101=−35×4620+1601×101따라서 101 모듈로 4620 의 역 ˉa=1601 이다.
예제 3
- a 모듈로 m 의 역 ˉa를 알고 있으면 합동 ax≡b (modm) 을 풀 수 있다.
- 양 변에 ˉa 를 곱하면 된다.
선형합동 3x≡4(mod7) 의 해를 구하라.
먼저 3 모듈로 7 의 역을 찾아보자.
ˉa×3≡1 (mod7)베주의 항등식을 이용하면 1=7−2×3 이므로,
3 모듈로 7 의 역은 −2 이다.
합동식의 양 변에 −2를 곱하자.
3x≡4 (mod7)−2×3x≡−2×4 (mod7)−6x≡−8 (mod7)그런데 −6≡1 (mod7) 이고, −8≡6 (mod7) 이다.
우변과 나머지를 맞추기 위해 x≡6 (mod7) 이라 가정하자.
−6x≡−8 (mod7)1×6≡6 (mod7)대입해보면 들어맞는다.
3x≡4 (mod7)3×6≡4 (mod7)18≡4 (mod7)따라서 x≡6 (mod7) 인 정수 x, 즉 −8,−1,6,13,20,... 등이 합동의 해이다.
중국인의 나머지 정리
The Chinese Remainder Theorem
Let m1,m2,...,mn be pairwise relatively prime positive integers greater than one and a1,a2,...,an arbitrary integers. Then the system
x≡a1(modm1),x≡a2(modm2),⋮x≡an(modmn) has a unique solution modulo m=m1⋅m2...mn. (That is, there is a solution x with 0≤x<m, and all other solutions are congruent modulo m to this solution.)
- m1,m2,...,mn가 모두 서로소인 양의 정수이고, a1,a2,...,an가 모두 임의의 정수라 할 때,
- 다음의 연립 합동식은 유일한 해를 갖는다.
- 그리고 그 해는 모듈로 m=m1⋅m2...mn 이다.
- 즉 0≤x<m 인 해 x가 있고, 모든 다른 해는 이 해에 모듈로 m 합동이다.
증명
m=m1⋅m2...mn 이므로, Mk 를 다음과 같이 정의하자.
Mk=mmk그런데 m1,m2,m3,...,mn 은 모두 서로소이므로 mk 와 Mk의 최대공약수는 1 이다.
gcd(mk,Mk)=1mk과 Mk 가 서로소이고, mk>1 이므로, 위에서 언급한 정리에 의해 Mk 모듈로 mk의 역이 존재할 것이다.
그 Mk 모듈로 mk의 역을 yk 라 하자.
Mk⋅yk≡1 (modmk)연립해를 구성하기 위해 다음과 같은 합을 꾸며보자.
x=a1M1y1+a2M2y2+...+anMnyn이 합이 왜 엽립해가 되는가?
j≠k 일 때 Mj≡0 (modmk) 이므로 k 번째 항을 제외한 모든 항이 0 모듈로 mk 에 합동이기 때문이다.
x≡akMkyk≡ak (modmk)예제 4
알려지지 않은 숫자가 있다. 3으로 나누면 2가 남고 5로 나누면 3이 남고 7로 나누면 2가 남는 수는 무엇인가?
이 문제는 다음의 연립 합동식으로 생각할 수 있다.
x≡2(mod3),x≡3(mod5),x≡2(mod7)그리고 m=3×5×7=105 이므로,
M1=m3=35M2=m5=21M3=m7=1535 modulo 3의 역 y1, 21 modulo 5의 역 y2, 15 modulo 7의 역 y3를 구하자.
- 35y1≡1 (mod3) 이므로 y1=2
- 21y2≡1 (mod5) 이므로 y2=1
- 15y3≡1 (mod7) 이므로 y3=1
x≡a1M1y1+a2M2y2+a3M3y3 이므로, 값을 대입해 계산해 보면…
a1M1y1+a2M2y2+a3M3y3=2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233233 이 문제의 답에 해당되긴 하지만 더 작은 수를 찾아보면 좋을 것 같다.
x≡233(mod105)≡128(mod105)≡23(mod105)따라서 문제의 조건에 들어맞는 가장 작은 자연수는 23 이다.
예제 5
알려지지 않은 숫자가 있다. 5로 나누면 1이 남고 6으로 나누면 2가 남고 7로 나누면 3이 남는 수는 무엇인가?
예제 4와 똑같이 풀어보자. 다음과 같은 연립 합동식을 생각할 수 있을 것이다.
x≡1(mod5),x≡2(mod6),x≡3(mod7)m=5×6×7=210 이므로…
M1=m5=2105=42M2=m6=2106=35M3=m7=2107=30이제 42 modulo 5 의 역 y1, 35 modulo 6 의 역 y2, 30 modulo 7 의 역 y3 을 구하자.
- 42y1≡1 (mod5) 이므로 y1=3
- 35y2≡1 (mod6) 이므로 y2=5
- 30y3≡1 (mod7) 이므로 y3=4
x≡a1M1y1+a2M2y2+a3M3y3 이므로, 값을 대입해 계산해 보면…
a1M1y1+a2M2y2+a3M3y3=1⋅42⋅3+2⋅35⋅5+3⋅30⋅4=126+350+360=836이제 값을 좁혀 나가면 된다.
x≡836(mod210)≡206(mod210)206 은 5 로 나누면 1 이 남고, 6 으로 나누면 2 가 남고, 7 로 나누면 3 이 남는 가장 작은 양의 정수이다.
예제 6
back substitution 방법을 사용하여 x≡1(mod5),x≡2(mod6),x≡3(mod7)을 만족하는 모든 x를 찾아라.
위의 예제 5를 다른 방식으로 풀어보는 문제다.
x≡1(mod5) 를 x=5t+1 과 같이 표현할 수 있다(단, t는 정수).
이를 이용하자.
x=5t+1 를 두 번째 합동식에 대입해보자.
5t+1≡2(mod6)5t≡1(mod6)이제 t 를 구하자. t 는 5 모듈로 6 의 역이다.
gcd(5,6)=1 이고, 1=1×6−1×5 이므로 5 모듈로 6 의 역이 -1 임을 알 수 있다.
t 는 6 을 주기로 순환할 것이므로 6u−1 과 같이 표현할 수 있을텐데, 모듈로 6 에 대해 생각해야 하므로 6을 더해 -1 을 없애주자.
따라서 t=6u+5 이다(단, u는 정수).
그렇다면 x를 다음과 같이 u 로 표현할 수 있다.
x=5t+1=5(6u+5)+1=30u+26이제 이 x 를 세번째 합동식에 대입하자.
x≡3(mod7)30u+26≡3(mod7)30u+(3×7+5)≡3(mod7)30u+5≡3(mod7)30u≡−2(mod7)30u≡5(mod7)u 를 조사하기 위해 30 모듈러 7 의 역을 구하자.
30=4×7+27=2×3+1gcd(30,7)=1 이다.
1=7−2×3=7−(30−4×7)×3=7−3×30+12×7=−3×30+13×77 로 나누었을 때 1 이 나머지가 되어야 하므로 모양을 잘 살펴보면 역의 후보는 13 이 아니라 -3 이라는 것을 알 수 있다.
-3 에 7 을 더하면 4 이므로 30 모듈러 7 의 역은 4 이다.
30u≡5(mod7)4×30u≡4×5(mod7)120u≡20(mod7)u≡6(mod7)따라서 u=7v+6 이다(단, v 는 정수).
그러므로 x=30u+26
x=30u+26=30(7v+6)+26=210v+206세 합동식을 모두 사용해여 만든 x≡206(mod210) 이다.
즉, x 는 206,416,626,... 이다.
응용: 큰 정수를 컴퓨터로 계산하기
중국인의 나머지 정리를 응용하면 어떤 수 a를 (amodm1,amodm2,...,amodmn) 과 같은 방법으로 유일하게 표현할 수 있다.
가령 0 부터 11 까지의 모든 수를 mod3, mod4 를 써서 다음과 같이 유일하게 나타낼 수 있다.
0=(0mod3,0mod4)=(0,0)1=(1mod3,1mod4)=(1,1)2=(2mod3,2mod4)=(2,2)3=(3mod3,3mod4)=(0,3)4=(4mod3,4mod4)=(1,0)5=(5mod3,5mod4)=(2,1)6=(6mod3,6mod4)=(0,2)7=(7mod3,7mod4)=(1,3)8=(8mod3,8mod4)=(2,0)9=(9mod3,9mod4)=(0,1)10=(10mod3,10mod4)=(1,2)11=(11mod3,11mod4)=(2,3)- 아주 커다란 정수를 "다른 방식으로" 표현하는 방법의 하나로 고려할 수 있다.
- 큰 정수에 대한 연산이 필요할 때, n 쌍의 각 요소에 해당 연산을 수행하고, 모듈로 mi 합동식을 풀어서 값을 회복하는 방법으로 결과를 얻을 수 있다.
- 이 방법은 병렬 처리가 가능하기 때문에 큰 수를 효율적으로 다룰 수 있다.
예를 들어 99,98,97,95 를 계수로 사용한다 하자.
그렇다면 m 값은 다음과 같을 것이다.
m=99×98×97×95=89403930이제 89403930 보다 작은 모든 양의 정수는 99,98,97,95 로 표현하는 것이 가능하다.
구체적으로 만약 구하려는 수가 x=123684+413456 라면 다음과 같이 계산을 수행할 수 있다.
(123684mod99,123684mod98,123684mod97,123684mod95)=(33,8,9,89)(413456mod99,413456mod98,413456mod97,413456mod95)=(32,92,42,16)이제 두 튜플의 합을 구한다.
(33,8,9,89)+(32,92,42,16) =((33+32)mod99,(8+92)mod98,(9+42)mod97,(89+16)mod95) =(65mod99,100mod98,51mod97,105mod95) =(65,2,51,10)이제 x를 다음과 같은 합동식으로 표현할 수 있다.
x≡65(mod99)x≡2(mod98)x≡51(mod97)x≡10(mod95)0<x<98403930 이면서 이 합동식의 해가 되는 x는 하나 밖에 없다.
책에 이 합동식의 풀이는 안 나왔지만 하는 김에 풀어보자.
다음 식을 풀면 된다.
x≡(a1M1y1+a2M2y2+a3M3y3+a4M4y4)(mod89403930)일단 ai 는 이미 나와 있으므로 또 계산할 필요는 없다.
a1=65a2=2a3=51a4=10다음은 Mi,yi 차례. 계산이 좀 짜증나긴 하지만 큰 수의 연산을 위해 이 99,98,97,95 합동식을 사용하는 컴퓨터 시스템이라면 Mi,yi 와 같은 숫자들은 미리 계산해놓고 상수로 쓰고 있을 것이다.
M1=99×98×97×9599=903070M2=99×98×97×9598=912285M3=99×98×97×9597=921690M4=99×98×97×9595=941094이제 각 Mi 의 역을 구하면 된다.
903070×y1=1(mod99)912285×y2=1(mod98)921690×y3=1(mod97)941094×y4=1(mod95)역은 예제 4와 예제 5에서 많이 연습했으니 구하는 과정은 생략하자. (컴퓨터도 처음에 계산해둔 역을 사용할 것이다.)
계산해보면 다음과 같이 나온다.
y1=37y2=33y3=24y4=4따라서 다음과 같은 중간 결과를 얻을 수 있다.
a1M1y1=65×903070×37a2M2y2=2×912285×33a3M3y3=51×921690×24a4M4y4=10×941094×4구하고자 하는 x 의 값은 다음과 같으므로
x≡(a1M1y1+a2M2y2+a3M3y3+a4M4y4)(mod89403930)덧셈으로 연결된 각 aiMiyi 는 병렬로 따로 계산할 수 있을 것이다.
a1M1y1mod89403930=2171883350mod89403930=26189030a2M2y2mod89403930=60210810mod89403930=60210810a3M3y3mod89403930=1128148560mod89403930=55301400a4M4y4mod89403930=37643760mod89403930=37643760이제 나머지만 구하면 된다.
x≡26189030+60210810+55301400+37643760(mod89403930)≡179345000(mod89403930)≡537140따라서 x=123684+413456=537140 이다.
유사난수
pseudorandom numbers
알고리즘을 통해 생성된 난수는 진정한 난수라 부르기 어렵다. 따라서 유사난수라 부른다.
선형합동방법
linear congruential method
선형합동방법은 유사난수를 만들 때 흔히 사용하는 방법이다.
다음과 같은 방법을 따른다.
4개의 정수를 선택한다.
- modulus로서, m.
- multiplier로서, a.
- increment로서, c.
- seed로서, x0.
단, 위의 네 정수들은 다음 조건을 만족해야 한다.
2≤a<m0≤c<m0≤x0<m그리고 다음 합동식을 사용하면,
xn+1=(axn+c)modmx0으로 x1 을구하고 x1 로 x2를 구해낼 수 있다.
이 방법으로 {x0,x1,...,xn} 을 구한다.
(단, 0≤xi<m 이라는 점에 주의한다.)
프로그래밍을 할 때 구하곤 하는 일반적인 난수처럼 0과 1 사이의 값이 필요하면 선형합동방법을 통해 얻은 수를 m 으로 나누면 된다.
예제
선형합동방법으로 m=9,a=7,c=4,x0=3 을 사용해 유사난수의 수열을 구하라.
일단 합동식에 값을 채워보자. xn+1=(axn+c)modm 이므로…
xn+1=(7xn+4)mod9순서대로 계산해 보자.
x0=3x1=(7×x0+4)mod9=25mod9=7x2=(7×x1+4)mod9=53mod9=8x3=(7×x2+4)mod9=60mod9=6x4=(7×x3+4)mod9=46mod9=1x5=(7×x4+4)mod9=11mod9=2x6=(7×x5+4)mod9=18mod9=0x7=(7×x6+4)mod9=4mod9=4x8=(7×x7+4)mod9=32mod9=5x9=(7×x8+4)mod9=39mod9=3x9 에서 x0 과 똑같이 나오고, 이후로는 9를 주기로 순환하게 된다.
따라서 유사난수의 수열은 다음과 같다.
{3,7,8,6,1,2,0,4,5,3,7,8,6,...}검사 숫자
Check Digits
- 합동을 사용해 숫자 배열의 오류를 검사할 수 있다.
- 보통 수열의 마지막에 검사용 숫자를 더하는 방식이다.
- 검사용 숫자는 알고리즘을 사용해 만들어낸다.
패리티 검사 비트
parity check bits
- 비트열을 저장하거나 전송하기 전에 패리티 검사 비트 하나를 뒤에 붙이는 방식.
- 패리티 비트는 전체 비트열의 1이 짝수 개가 되도록 조절하는 비트이다.
예를 들어 11010110을 전송하려면 1이 5개이므로 패리티 비트 1을 붙여서 110101101 로 만든 다음 전송한다.
- 전송받은 쪽에서 비트열을 받아봤더니 010101101 가 나왔다고 하자.
- 1의 수를 세어보면 5개이다.
- 5mod2는 짝수가 아니므로 잘못 전송되었다는 것을 알 수 있다.
보내는 쪽에서 어떤 수를 보냈는지 전혀 모르는 상태이지만, 항상 1의 수가 짝수가 되도록 패리티 비트를 붙여 보내기로 했으므로 잘못 전송되었다는 것을 알 수 있다. 이제 재전송을 요청하면 된다.
- 이 방식의 문제점: 잘못 전송된 비트가 홀수 개일 때에만 잘못 전송되었다는 사실을 깨달을 수 있다.
참고문헌
- Rosen의 이산수학 / Kenneth H. Rosen 저 / 공은배 등저 / 한국맥그로힐(McGraw-Hill KOREA) / 2017년 01월 06일