[백준] 17466 N! mod P (1)

Python
avatar
2025.06.17
·
2 min read

문제

양의 정수 N과, N보다 큰 소수 P가 주어질 때, N!을 P로 나눈 나머지를 구하여라.


입력

첫째 줄에 N과 P가 공백으로 구분되어 주어진다.


출력

N!을 P로 나눈 나머지를 구하여라.


제한

  • 1 N < P 108

  • P는 소수


내 풀이

n, p = map(int, input().split())

answer = n
for i in range(n-1, 1, -1):
    answer = answer*i%p
    
print(answer%p)

코멘트

모듈러 연산을 이용하면 pypy3 한정으로 정답을 받을 수 있다. (python으로는 어떻게 풀어도 시간 초과를 받을 수 밖에 없는 듯)

모듈러 연산(modular arithmetic)은 어떤 수를 나눈 뒤 남는 나머지를 구하는 연산이다. 프로그래밍에서는 큰 수를 계산하면 오버플로우가 발생할 수 있으므로, 중간 계산마다 모듈러 연산을 적용해서 수를 제한한다. 모듈러 연산은 다음과 같은 성질이 있기 때문에, 중간 계산마다 모듈러 연산을 해도 최종 계산 결과에만 모듈러 연산을 한 것과 같아진다.

  • 덧셈
    (a + b) mod m = ((a mod m) + (b mod m)) mod m

  • 곱셈
    (a x b) mod m = ((a mod m) x (b mod m)) mod m

  • 뺄셈
    (a - b) mod m = ((a mod m) - (b mod m)) mod m


References

https://www.acmicpc.net/problem/17466







- 컬렉션 아티클