만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

거듭제곱 분할 함수의 거듭제곱

시간 제한2초메모리 제한512 MB

요약
n, m, k가 주어질 때 m진 분할 함수의 k번 합성곱 거듭제곱을 0부터 n까지 더한 값을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
정수론, 분할 정복, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

정수 mm은 m≥2m \ge 2를 만족하는 고정된 정수이다. 양의 정수 nn에 대해, bm(n)b_m(n)은 nn을 지수가 0 이상인 mm의 거듭제곱들의 합으로 나타내는 방법의 수이다. 같은 항을 여러 번 쓸 수 있고, 항의 순서는 고려하지 않는다. 빈 합이 한 가지 방법이므로 bm(0)=1b_m(0) = 1로 정의한다.

예를 들어, {b2(n)}\{b_2(n)\}의 처음 10개 항은 {1,1,2,2,4,4,6,6,10,10}\{1, 1, 2, 2, 4, 4, 6, 6, 10, 10\}이고, {b3(n)}\{b_3(n)\}의 처음 10개 항은 {1,1,1,2,2,2,3,3,3,5}\{1, 1, 1, 2, 2, 2, 3, 3, 3, 5\}이다.

cmk(n)c_m^k(n)은 bm(n)b_m(n)의 kk번째 합성곱으로, 다음과 같이 정의한다.

cmk(n)={bm(n),k=1∑i=0nbm(i)⋅cmk−1(n−i),k≥2c_m^k(n)=\begin{cases} b_m(n), & k = 1 \\ \sum_{i=0}^{n} b_m(i) \cdot c_m^{k-1}(n-i), & k \ge 2 \end{cases}

보보는 주어진 nn, mm, kk에 대해 다음 값을 구하려 한다.

f(n)=(∑i=0ncmk(i)) mod (109+7).f(n) = \left( \sum_{i=0}^{n} c_m^k(i) \right) \bmod (10^9 + 7).

입력

첫 줄에 세 정수 nn, mm, kk가 주어진다 (0≤n≤10180 \le n \le 10^{18}, 2≤m≤10182 \le m \le 10^{18}, 1≤k≤101 \le k \le 10).

출력

f(n)f(n)의 값을 출력한다.

예제3

  1. 예제 1

    입력
    0 2 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    10 2 3
    
    예상 출력
    2700
    
  3. 예제 3

    입력
    100 2 10
    
    예상 출력
    490796617