-
나머지 연산Knowledge/Math 2019. 9. 5. 20:54반응형
알고리즘 문제를 풀다보면 정수형으로 표현하기엔 너무 큰 값이 나올 때가 있다.
이럴 경우엔 크기를 줄이기 위해 특정 숫자로 나눈 나머지를 출력하라는 식으로 답을 요구하곤 한다.
이럴 때는 답을 다 구하고 나머지 연산을 수행하는 게 아니고
정답을 갱신할 때 마다 나머지 연산을 수행해 줘야 한다.
( A + B ) % M 은 ( ( A % M ) + ( B % M ) ) % M 과 같기 때문
이는 곱셈에서도 ( A X B ) % M 은 ( ( A % M ) X ( B % M ) ) % M 이와 같이 성립한다.
다만 나누기의 경우엔 성립하지 않고 뺄셈의 경우엔 주의해야 하는 부분이 있다.
예를 들어 (6 - 5) % 3 은 1. 즉, 1 % 3은 1이 나오지만
(6%3 - 5%3) % 3 은 (0-2) % 3 이 되어버려서 -2 % 3이 된다.
이의 답은 프로그래밍 언어마다 다른데 파이썬은 1이 나오지만
Java와 C와 C++은 -2가 나온다.
이런 경우를 방지하기 위해서 뺄셈의 경우
나머지를 구해 뺀 값에 나머지를 한번 더해주는 과정을 거친다.
a % c 는 0 이상이거나 c보다 작고
b % c 역시 0 이상이거나 c보다 작기 때문에
(a % c - b % c) 의 결과는 항상 -C 보다는 크고 C 보다는 작다.
따라서 ( a % c - b % c + c ) 는 항상 0보다 큰 값을 갖기 때문에 위와 같은 상태를 방지할 수 있고
이 상태에서 다시 C로 나머지 연산을 해주면 원하는 결과를 얻을 수 있다.
반응형'Knowledge > Math' 카테고리의 다른 글
[이산수학 - 2강] 명제와 명제 논리 / 술어 논리와 추론 (0) 2020.05.17 [이산수학 - 1강] 이산수학은 무엇이며 왜 배우는 걸까? (0) 2020.05.17 팩토리얼 (0) 2019.09.06 소수 (0) 2019.09.06 최대 공약수와 최소 공배수 (0) 2019.09.05