a = 999999999
b = 999999999 라고 가정하면
a % MOD + b % MOD = 1999999998이 되지만
(a + b ) % MOD라고 하면 99999998이 되어서 오버플로우가 나지 않는다 (와우)
이걸 int 범위 안에 넣게 하기 위해서 마지막에 자른다고 생각하면 잘 이해된다.
암튼 덧셈부터 하고 MOD하는게 오버플로우가 나지 않는 이유는 결과값이 10억 미만인게 보장이 됨 (마지막에 MOD 취해버리니깐) 그래서 이 두개를 더하면 20억 미만이 돼서 당연히 int안에 들어간다!
> 만약 덧셈이 두 개 이상이라면?
((a+b) % MOD + c) % MOD
이런 순서대로 더한다
> 곱셈이라면??
64비트 쓰세용
'공부합시다' 카테고리의 다른 글
pbds (0) | 2021.05.08 |
---|---|
LIS 최장 증가 부분 수열 (0) | 2020.10.25 |
비트마스크로 부분집합 관리 (0) | 2020.09.21 |
거듭 제곱 빠른 계산 (0) | 2020.09.19 |
std::bitset (0) | 2020.09.01 |