DivModulo

시간 제한3초메모리 제한1024 MB

요약
M이 4e18까지, D가 1.6e7까지 주어질 때 C(M,N)에서 D의 인수를 모두 제거한 뒤 D로 나눈 나머지를 구한다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 조합론, 구현
정답자
아직 제출이 없습니다

문제

Modulo(mod)는 정수에서 매우 흔히 쓰이는 연산이다. 두 정수 nn과 d>0d > 0에 대해 r≡(n mod d)r \equiv (n \bmod d)는 0≤r<d0 \le r < d이고 n=q×d+rn = q \times d + r인 정수 qq가 존재하는 rr로 정의된다. 예를 들어 (200 mod 5)≡0(200 \bmod 5) \equiv 0은 200을 5로 나눈 나머지가 0임을 뜻한다.

다음은 DivModulo(dmod)라는 새로운 연산의 정의이다. 두 정수 nn과 d>0d > 0에 대해 r≡(ndmodd)r \equiv (n \mathbin{\mathrm{dmod}} d)는 r≡(m mod d)r \equiv (m \bmod d)이고 n=m×dhn = m \times d^h이며 dd가 mm의 약수가 아닌 정수 mm과 hh가 존재하는 rr로 정의된다. 예를 들어 (200dmod5)≡3(200 \mathbin{\mathrm{dmod}} 5) \equiv 3이다. 200=8×52200 = 8 \times 5^2이고 (8 mod 5)≡3(8 \bmod 5) \equiv 3이기 때문이다.

팩토리얼과 조합 함수를 생각하자. 정수 M≥0M \ge 0에 대해 팩토리얼 M!M!은 M!=M×(M−1)×(M−2)×⋯×3×2×1M! = M \times (M-1) \times (M-2) \times \cdots \times 3 \times 2 \times 1로 정의되고 0!=10! = 1로 정의된다. 0≤N≤M0 \le N \le M인 정수 MM과 NN에 대해 조합 함수 C(M,N)C(M, N)은 C(M,N)=M!/(N!×(M−N)!)C(M, N) = M!/(N! \times (M-N)!)로 정의된다. 세 정수 MM, NN, DD가 D>0D > 0을 만족하며 주어질 때 C(M,N)dmodDC(M, N) \mathbin{\mathrm{dmod}} D를 계산하시오. 예를 들어 (C(9,2)dmod3)≡(36dmod3)≡(4×32dmod3)≡(4 mod 3)≡1(C(9, 2) \mathbin{\mathrm{dmod}} 3) \equiv (36 \mathbin{\mathrm{dmod}} 3) \equiv (4 \times 3^2 \mathbin{\mathrm{dmod}} 3) \equiv (4 \bmod 3) \equiv 1이다.

입력

한 줄에 세 정수 MM, NN, DD가 주어진다.

출력

C(M,N)dmodDC(M, N) \mathbin{\mathrm{dmod}} D를 한 줄에 출력한다.

제한

  • 1≤M≤4×10181 \le M \le 4 \times 10^{18}
  • 0≤N≤M0 \le N \le M
  • 2≤D≤1.6×1072 \le D \le 1.6 \times 10^7

예제4

  1. 예제 1

    입력
    9 2 3
    
    예상 출력
    1
    
  2. 예제 2

    입력
    5 2 5
    
    예상 출력
    2
    
  3. 예제 3

    입력
    6 3 6
    
    예상 출력
    2
    
  4. 예제 4

    입력
    7654321 1234567 1050
    
    예상 출력
    210