만드는 중입니다

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

m진 분할

면접 대비

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

요약
n을 m의 거듭제곱들의 합으로 나타내는 분할의 수를 세는 문제로, 최대 1000개의 질의와 n은 10000까지 주어진다.
난이도

보통10점 중 5점

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

문제

정수 nn의 분할은 합이 nn인 양의 정수 모음이고, 보통 내림차순으로 쓴다. 예를 들면 다음과 같다.

10 = 4+3+2+1

분할에 들어가는 항이 모두 mm의 거듭제곱이면 이 분할을 m진 분할이라고 한다. 9의 3진 분할은 다음 다섯 가지다.

9
3+3+3
3+3+1+1+1
3+1+1+1+1+1+1
1+1+1+1+1+1+1+1+1

정수 nn의 m진 분할이 몇 개인지 세는 프로그램을 작성하라.

입력

첫 줄에 데이터 세트의 개수 PP (1≤P≤10001 \le P \le 1000)가 주어진다. 데이터 세트는 서로 독립이고 모두 같은 방법으로 처리한다.

각 데이터 세트는 한 줄이며, 공백으로 구분한 정수 세 개로 이루어진다. 차례대로 데이터 세트 번호 KK (1≤K≤10001 \le K \le 1000), 거듭제곱의 밑 mm (3≤m≤1003 \le m \le 100), m진 분할의 개수를 셀 정수 nn (3≤n≤100003 \le n \le 10000)이다. 데이터 세트 번호는 입력에서 읽는 값이고, 오름차순이라는 보장은 없다.

nn의 m진 분할 개수는 항상 32비트 부호 없는 정수 범위에 들어간다.

출력

데이터 세트마다 한 줄씩, 입력에 나온 순서대로 출력한다. 각 줄에는 입력에서 읽은 데이터 세트 번호 KK, 공백 하나, nn의 m진 분할 개수를 차례대로 쓴다.

예제2

  1. 예제 1

    입력
    5
    1 3 9
    2 3 47
    3 5 123
    4 7 4321
    5 97 9999
    
    예상 출력
    1 5
    2 63
    3 75
    4 144236
    5 111
    
  2. 예제 2

    입력
    1
    1 3 3
    
    예상 출력
    1 2