선형합동
상위 문서: {{ item.title }} -
Linear Congruences
선형합동
Linear Congruences
A congruence of the form , where is a positive integer, and are integers, and is a variable, is called a linear congruence.
- 양의 정수 m, 정수 a,b 에 대하여,
- 형태의 합동을 선형합동(linear congruence)이라 부른다.
a 모듈로 m 의 역(inverse)
- 인 정수 가 존재한다면,
- 정수 를 모듈로 의 역(inverse)이라 부른다.
If and are relatively prime integers and , then an inverse of modulo exists. Furthermore, this inverse is unique modulo . (That is, there is a unique positive integer less than that is an inverse of modulo and every other inverse of modulo is congruent to modulo .)
- 에 대하여
- 이 서로소이고 이면
- 모듈로 의 역이 존재한다.
- 이런 경우, 인 모듈로 의 역 는 하나 밖에 없다.
- 그 외의 다른 모든 a 모듈로 m 의 역은 모듈로 m과 합동이다.
- 이 서로소이고 이면
예를 보며 이해하자.
- .
- 2와 5는 서로소이고 이므로, ‘2 모듈로 5’의 역 는 존재한다.
- 정수 3, 8, 13, 18, … 등은 ‘2 모듈로 5의 역’이다.
- 보다 작은 ‘2 모듈로 5의 역’ 은 3 하나뿐이다.
a 모듈로 m 의 역 구하기 연습
예제 1
베주의 계수를 찾는 방법으로, 3 modulo 7 의 역을 찾아라.
- 3과 7의 최대공약수는 1이다.
- 이므로
- 베주의 항등식으로 표현하면
- 따라서 베주의 계수는 이다.
- 잘 살펴보면 3 modulo 7 의 역이 라는 것을 알 수 있다.
- 0보다 크고 m 보다 작은 역은 5 이다.
예제 2
101 모듈로 4620 의 역을 찾아라.
먼저 유클리드 호제법을 사용해 을 찾자.
베주의 항등식을 만들자.
형태가 나오도록 위의 호제법 과정의 계산식을 적당히 가져다 끼워 맞추면 된다.
따라서 101 모듈로 4620 의 역 이다.
예제 3
- a 모듈로 m 의 역 를 알고 있으면 합동 을 풀 수 있다.
- 양 변에 를 곱하면 된다.
선형합동 의 해를 구하라.
먼저 3 모듈로 7 의 역을 찾아보자.
베주의 항등식을 이용하면 이므로,
3 모듈로 7 의 역은 이다.
합동식의 양 변에 를 곱하자.
그런데 이고, 이다.
우변과 나머지를 맞추기 위해 이라 가정하자.
대입해보면 들어맞는다.
따라서 인 정수 x, 즉 등이 합동의 해이다.
중국인의 나머지 정리
The Chinese Remainder Theorem
Let be pairwise relatively prime positive integers greater than one and arbitrary integers. Then the system
has a unique solution modulo . (That is, there is a solution with , and all other solutions are congruent modulo to this solution.)
- 가 모두 서로소인 양의 정수이고, 가 모두 임의의 정수라 할 때,
- 다음의 연립 합동식은 유일한 해를 갖는다.
- 그리고 그 해는 모듈로 이다.
- 즉 인 해 가 있고, 모든 다른 해는 이 해에 모듈로 합동이다.
증명
이므로, 를 다음과 같이 정의하자.
그런데 은 모두 서로소이므로 와 의 최대공약수는 1 이다.
과 가 서로소이고, 이므로, 위에서 언급한 정리에 의해 모듈로 의 역이 존재할 것이다.
그 모듈로 의 역을 라 하자.
연립해를 구성하기 위해 다음과 같은 합을 꾸며보자.
이 합이 왜 엽립해가 되는가?
일 때 이므로 번째 항을 제외한 모든 항이 모듈로 에 합동이기 때문이다.
예제 4
알려지지 않은 숫자가 있다. 3으로 나누면 2가 남고 5로 나누면 3이 남고 7로 나누면 2가 남는 수는 무엇인가?
이 문제는 다음의 연립 합동식으로 생각할 수 있다.
그리고 이므로,
35 modulo 3의 역 , 21 modulo 5의 역 , 15 modulo 7의 역 를 구하자.
- 이므로
- 이므로
- 이므로
이므로, 값을 대입해 계산해 보면…
233 이 문제의 답에 해당되긴 하지만 더 작은 수를 찾아보면 좋을 것 같다.
따라서 문제의 조건에 들어맞는 가장 작은 자연수는 23 이다.
예제 5
알려지지 않은 숫자가 있다. 5로 나누면 1이 남고 6으로 나누면 2가 남고 7로 나누면 3이 남는 수는 무엇인가?
예제 4와 똑같이 풀어보자. 다음과 같은 연립 합동식을 생각할 수 있을 것이다.
이므로…
이제 42 modulo 5 의 역 , 35 modulo 6 의 역 , 30 modulo 7 의 역 을 구하자.
- 이므로
- 이므로
- 이므로
이므로, 값을 대입해 계산해 보면…
이제 값을 좁혀 나가면 된다.
206 은 5 로 나누면 1 이 남고, 6 으로 나누면 2 가 남고, 7 로 나누면 3 이 남는 가장 작은 양의 정수이다.
예제 6
back substitution 방법을 사용하여 을 만족하는 모든 를 찾아라.
위의 예제 5를 다른 방식으로 풀어보는 문제다.
를 과 같이 표현할 수 있다(단, 는 정수).
이를 이용하자.
를 두 번째 합동식에 대입해보자.
이제 를 구하자. 는 5 모듈로 6 의 역이다.
이고, 이므로 5 모듈로 6 의 역이 -1 임을 알 수 있다.
t 는 6 을 주기로 순환할 것이므로 과 같이 표현할 수 있을텐데, 모듈로 6 에 대해 생각해야 하므로 6을 더해 -1 을 없애주자.
따라서 이다(단, 는 정수).
그렇다면 를 다음과 같이 로 표현할 수 있다.
이제 이 를 세번째 합동식에 대입하자.
u 를 조사하기 위해 30 모듈러 7 의 역을 구하자.
이다.
7 로 나누었을 때 1 이 나머지가 되어야 하므로 모양을 잘 살펴보면 역의 후보는 13 이 아니라 -3 이라는 것을 알 수 있다.
-3 에 7 을 더하면 4 이므로 30 모듈러 7 의 역은 4 이다.
따라서 이다(단, 는 정수).
그러므로
세 합동식을 모두 사용해여 만든 이다.
즉, 는 이다.
응용: 큰 정수를 컴퓨터로 계산하기
중국인의 나머지 정리를 응용하면 어떤 수 를 과 같은 방법으로 유일하게 표현할 수 있다.
가령 0 부터 11 까지의 모든 수를 , 를 써서 다음과 같이 유일하게 나타낼 수 있다.
- 아주 커다란 정수를 “다른 방식으로” 표현하는 방법의 하나로 고려할 수 있다.
- 큰 정수에 대한 연산이 필요할 때, n 쌍의 각 요소에 해당 연산을 수행하고, 모듈로 합동식을 풀어서 값을 회복하는 방법으로 결과를 얻을 수 있다.
- 이 방법은 병렬 처리가 가능하기 때문에 큰 수를 효율적으로 다룰 수 있다.
예를 들어 를 계수로 사용한다 하자.
그렇다면 값은 다음과 같을 것이다.
이제 89403930 보다 작은 모든 양의 정수는 로 표현하는 것이 가능하다.
구체적으로 만약 구하려는 수가 라면 다음과 같이 계산을 수행할 수 있다.
이제 두 튜플의 합을 구한다.
이제 를 다음과 같은 합동식으로 표현할 수 있다.
이면서 이 합동식의 해가 되는 는 하나 밖에 없다.
책에 이 합동식의 풀이는 안 나왔지만 하는 김에 풀어보자.
다음 식을 풀면 된다.
일단 는 이미 나와 있으므로 또 계산할 필요는 없다.
다음은 차례. 계산이 좀 짜증나긴 하지만 큰 수의 연산을 위해 이 합동식을 사용하는 컴퓨터 시스템이라면 와 같은 숫자들은 미리 계산해놓고 상수로 쓰고 있을 것이다.
이제 각 의 역을 구하면 된다.
역은 예제 4와 예제 5에서 많이 연습했으니 구하는 과정은 생략하자. (컴퓨터도 처음에 계산해둔 역을 사용할 것이다.)
계산해보면 다음과 같이 나온다.
따라서 다음과 같은 중간 결과를 얻을 수 있다.
구하고자 하는 의 값은 다음과 같으므로
덧셈으로 연결된 각 는 병렬로 따로 계산할 수 있을 것이다.
이제 나머지만 구하면 된다.
따라서 이다.
유사난수
pseudorandom numbers
알고리즘을 통해 생성된 난수는 진정한 난수라 부르기 어렵다. 따라서 유사난수라 부른다.
선형합동방법
linear congruential method
선형합동방법은 유사난수를 만들 때 흔히 사용하는 방법이다.
다음과 같은 방법을 따른다.
4개의 정수를 선택한다.
- modulus로서, .
- multiplier로서, .
- increment로서, .
- seed로서, .
단, 위의 네 정수들은 다음 조건을 만족해야 한다.
그리고 다음 합동식을 사용하면,
으로 을구하고 로 를 구해낼 수 있다.
이 방법으로 을 구한다.
(단, 이라는 점에 주의한다.)
프로그래밍을 할 때 구하곤 하는 일반적인 난수처럼 0과 1 사이의 값이 필요하면 선형합동방법을 통해 얻은 수를 으로 나누면 된다.
유사난수 선형합동방법 예제
선형합동방법으로 을 사용해 유사난수의 수열을 구하라.
일단 합동식에 값을 채워보자. 이므로…
순서대로 계산해 보자.
에서 과 똑같이 나오고, 이후로는 9를 주기로 순환하게 된다.
따라서 유사난수의 수열은 다음과 같다.
검사 숫자
Check Digits
- 합동을 사용해 숫자 배열의 오류를 검사할 수 있다.
- 보통 수열의 마지막에 검사용 숫자를 더하는 방식이다.
- 검사용 숫자는 알고리즘을 사용해 만들어낸다.
패리티 검사 비트
parity check bits
- 비트열을 저장하거나 전송하기 전에 패리티 검사 비트 하나를 뒤에 붙이는 방식.
- 패리티 비트는 전체 비트열의 1이 짝수 개가 되도록 조절하는 비트이다.
예를 들어 을 전송하려면 1이 5개이므로 패리티 비트 1을 붙여서 로 만든 다음 전송한다.
- 전송받은 쪽에서 비트열을 받아봤더니 가 나왔다고 하자.
- 1의 수를 세어보면 5개이다.
- 는 짝수가 아니므로 잘못 전송되었다는 것을 알 수 있다.
보내는 쪽에서 어떤 수를 보냈는지 전혀 모르는 상태이지만, 항상 1의 수가 짝수가 되도록 패리티 비트를 붙여 보내기로 했으므로 잘못 전송되었다는 것을 알 수 있다. 이제 재전송을 요청하면 된다.
- 이 방식의 문제점: 잘못 전송된 비트가 홀수 개일 때에만 잘못 전송되었다는 사실을 깨달을 수 있다.
참고문헌
- Rosen의 이산수학 / Kenneth H. Rosen 저 / 공은배 등저 / 한국맥그로힐(McGraw-Hill KOREA) / 2017년 01월 06일
함께 읽기
- [[discrete-math-modular]]{모듈러 연산(나머지 연산)}
- [[gcd]]{최대공약수와 최소공배수}