학습 배경
17466번: N! mod P (1)
양의 정수 N과, N보다 큰 소수 P가 주어질 때, N!을 P로 나눈 나머지를 구하여라.
www.acmicpc.net
소수 P에 대해 N! mod P를 구하는 문제이다.
이를 빠르게 계산하려면 곱 연산과 모듈로 연산 간의 관계를 이해할 필요가 있다고 생각했다.
다행히 이를 배울 수 있도록 친절하게 구성된 사이트가 있었다.
학습
모듈로 연산이란? (개념 이해하기) | 암호학이란? | Khan Academy
수학, 예술, 컴퓨터 프로그래밍, 경제, 물리학, 화학, 생물학, 의학, 금융, 역사 등을 무료로 학습해 보세요. 칸아카데미는 어디에서나 누구에게나 세계 최고의 무료 교육을 제공하는 미션을 가진
ko.khanacademy.org
A, B | A = B * Q + R | A % B |
5, 3 | 5 = 3 * 1 +2 | 5 % 3 = +2 |
-5, 3 | -5 = 3 * -2 +1 | -5 % 3 = +1 |
합동과 모듈 (개념 이해하기) | 모듈로 연산 | Khan Academy
수학, 예술, 컴퓨터 프로그래밍, 경제, 물리학, 화학, 생물학, 의학, 금융, 역사 등을 무료로 학습해 보세요. 칸아카데미는 어디에서나 누구에게나 세계 최고의 무료 교육을 제공하는 미션을 가진
ko.khanacademy.org
정수 k, n, m에 대해 A = n * C + k, B = m * C + k이면,
A, B는 mod C에 대해 합동 관계이다.
이와 같은 관계를 정리한 동치식의 종류와 그 성질은 다음과 같다.
모듈로 덧셈과 뺄셈 (개념 이해하기) | 암호학이란? | Khan Academy
수학, 예술, 컴퓨터 프로그래밍, 경제, 물리학, 화학, 생물학, 의학, 금융, 역사 등을 무료로 학습해 보세요. 칸아카데미는 어디에서나 누구에게나 세계 최고의 무료 교육을 제공하는 미션을 가진
ko.khanacademy.org
(A + B) mod C = (A mod C + B mod C) mod C
모듈로 곱셈 전 덧셈/뺄셈에 대한 성질부터 공부한다.
학습 링크에 정의가 있지만 개인적으로도 증명을 시도해보았다.
증명

나머지 정리에 의해 k*C 꼴의 항은 mod C 결과에 고려되지 않아 생략할 수 있다.
m_a + m_b에 대해 다시 나머지 정리를 적용하면
m_c = (m_a + m_b) mod C 이고,
m_a = A mod C,
m_b = B mod C,
m_a + m_b = (A + B) mod C이므로,
m_c = (A mod C + B mod C) mod C
= ((A + B) mod C) mod C가 된다.
모듈로 곱셈 (개념 이해하기) | 암호학이란? | Khan Academy
모듈로 거듭제곱법 (개념 이해하기) | 암호학이란? | Khan Academy
결과적으로 문제 풀이에 적용하는 것이 목적이기 때문에 증명 과정은 생략하도록 한다.
빠른 모듈로 거듭제곱법 (개념 이해하기) | 암호학이란? | Khan Academy
아이디어가 재밌어서 가져왔다.
- A^B 거듭제곱을 곱으로 분해한다.
- 이 때, 기존 공식처럼 A*A*...*A 로 모두 나누지 않는 것이 포인트
- A^k를 구하기 위해 A^k/2를 구하는 식으로 dynamic programming 기법을 사용한다.
마치며...
다양한 공식은 습득했지만, 이것을 팩토리얼에 적절하게 적용하는 방식은 고민을 좀 더 해봐야 할 것 같다.
'Learn' 카테고리의 다른 글
[패스트캠퍼스: Java&Spring 웹 개발] Week 4 - Spring MVC (0) | 2023.06.28 |
---|---|
[패스트캠퍼스: Java&Spring 웹 개발] Week 3 - Java OOP Advanced (0) | 2023.06.14 |
[패스트캠퍼스: Java&Spring 웹 개발] Week 2 - OOP Basic (0) | 2023.06.12 |
[패스트캠퍼스: SQL 데이터 분석 첫걸음] Week 5 - 프로젝트 해커톤 (2) | 2023.06.07 |
[패스트캠퍼스: SQL 데이터 분석 첫걸음] Week 4 - SQL 실무 감각 익히기 (0) | 2023.06.05 |