선형합동

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]]{최대공약수와 최소공배수}