32bit 정수형의 범위를 넘는 큰 수에 모듈러(modulo) 연산을 하려면 어떻게 해야 할까요?

모듈러 연산의 특성을 활용하면 됩니다.

 

정수 \(a, b\)를 \(M\)으로 나눈 나머지가 각각 \(a', b'\)라고 하겠습니다. 이 때 \(a+b\)를 \(M\)으로 나눈 나머지는 얼마일까요?

\begin{align}
a &= xM+a' \\
b &= yM+b' \\
a+b &= (x+y)M+(a'+b') \\
(a+b) \% M &= (a'+b') \% M
\end{align}

이렇게 유도돼서 결국은 \( (a+b)\%M=((a\%M)+(b\%M))\%M \) 라는 공식이 나오게 됩니다. 이런 성질은 덧셈, 뺄셈, 곱셈에 모두 성립합니다. (나눗셈은 제외)

 

\begin{align}
(a+b)\%M &= ((a\%M)+(b\%M))\%M \\
(a-b)\%M &= ((a\%M)-(b\%M)+M)\%M \\
(a \times b)\%M &= ((a\%M) \times (b\%M))\%M
\end{align}

뺄셈의 경우, mod 연산을 한 결과가 음수가 나올 수 있기 때문에 \(M\)을 더해줘야 합니다.

위 모듈러 공식을 이해하고 있으면 알고리즘 문제 풀 때 요긴하게 쓰입니다

반응형

'수학 > 정수론' 카테고리의 다른 글

약수의 개수, 약수의 합  (0) 2020.07.03
소수를 구하는 방법  (0) 2020.04.09
음수의 모듈러 연산  (0) 2020.04.09
최대공약수(GCD)와 최소공배수(LCM)  (0) 2020.04.09
큰 수의 모듈러 연산  (0) 2020.03.24