모듈러 연산을 활용해 분배 법칙을 하면 우리가 흔히 분배 법칙으로 기대하는 결과와는 차이가 있다.
- (A + B) % C = (A % C + B % C) % C
- (A - B) % C = (A % C - B % C + C) % C
- (A * B) % C = ((A % C) * (B % C)) % C
- (A / B) % C = (A * B^(-1)) % C = ((A % C) * (B^(-1) % C)) % C
뺄셈의 경우 추가적으로 +C를 해주었는데 이러면 나머지 결과가 0 이상임을 보장할 수 있다. 코딩할 때 사실 결과로서 위 법칙만을 기억해도 괜찮을 것 같아서 증명 과정이 필요할까 싶지만... 과정을 알면 나중에 더 쉽게 기억할 수 있을 것 같아 첨부한다. 증명은 더하기만 확인해 보기로 한다. 어려워 보일 수 있는데 단지 치환해서 좌변=우변인지 확인하는 과정이고 여기서 우리가 일반적으로 모듈러 연산을 어떻게 사용하는지를 떠올려 보면 된다.


나누기는 B에 대한 역수를 취한 뒤 곱셈 법칙으로 바꾸어 계산한다.
- (A / B) % C = (A * B^(-1)) % C = ((A % C) * (B^(-1) % C)) % C
모듈러 나눗셈
Modular 사칙연산만큼 친숙한 모듈러지만 연산은 사칙연산만큼 심플하지는 않다. 정의 자체가 나눗셈을 한 후에 나머지를 가리키는 뜻이니 나눗셈 이상의 매력이 있다. 그럼 한번 사칙연산과 모
ohgym.tistory.com
Khan Academy
ko.khanacademy.org
'문제 및 이론 정리 > 코딩 테스트' 카테고리의 다른 글
[코딩테스트] 확장 유클리드 호제법 접근 방법 (1) | 2024.11.28 |
---|---|
[코딩테스트] 오일러 피 (2) | 2024.10.05 |
[코딩테스트] 구간 합, 조합 (0) | 2024.07.08 |
[코딩테스트] 호제법, 소인수분해, 에라토스테네스의 체(소수 구하기) - 정수론 (0) | 2024.07.02 |