Step-by-Step
모듈러 연산 본문
문제를 풀다보면 특정 값으로 나눈 나머지값을 구하라는 문구를 많이 접하게 되었다.
자료형 범위를 넘어가지 않도록 조건을 제시해 준 것인데,
만약 전체 곱의 나머지를 구하라고 하면, 전체 곱이 나오기 전에 오버플로우가 발생할 수 있다.
이때 사용하는 것이 모듈러 연산이다.
모듈러 연산 (Modular Arithmetic)
어떤 한 숫자를 다른 숫자로 나눈 나머지를 구하는 연산
모듈러 합동 (Modular Congruent)
두 A,B 숫자가 M을 모듈러한 결과 값이 같다면 모듈러 합동관계라고 한다.
- A mod M = b mod N
- A ≡ B mod M
모듈러 합동식
- A = B + K * M (K는 정수)
이 식에서 B를 이항하게 되면,
- A - B = K * M
두 정수 A, B와 양의 정수 M에 대해 다음이 성립하면 모듈러 합동관계이다.
예를 들어 A = 10 , B = 4 이고 mod 3에 대해 합동관계라면, 10 - 4 = 2 * 3 으로 표현할 수 있다.
모듈러 합동 동치
다음 식은 모듈러 합동의 동치이다. ( ≡ 표시)
- A ≡ B (mod C)
- A mod C = B mod C
- A = B + K * C ↔ A - B = K * C
모듈러 연산
- 덧셈 ( A + B ) % M = ( ( A % M ) + ( B % M ) ) % M
- 뺄셈 ( A - B ) % M = ( ( A % M ) - ( B % M ) ) % M
- 곱셈 ( A * B ) % M = ( ( A % M ) * ( B % M ) ) % M
더 자세하고 이해하기 좋은 설명은 아래 링크를 통해 확인하면 된다!
[참조]
'CS공부 > 알고리즘' 카테고리의 다른 글
[Java/BFS] 프로그래머스 - 거리두기 확인하기 (0) | 2021.12.18 |
---|---|
[알고리즘] Greedy - 큰 수 만들기 (0) | 2021.12.13 |
[Greedy] 탐욕적 알고리즘 (0) | 2021.09.01 |
[DP] 동적계획법(Dynamic Programming) (0) | 2021.08.25 |
[BFS/DFS] 너비우선탐색/깊이우선탐색 (0) | 2021.07.06 |