• Feed
  • Explore
  • Ranking
/
/
    코딩 테스트 풀이

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

    Python
    J
    J. Hwang
    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







    - 컬렉션 아티클