금화 게임

시간 제한1초메모리 제한128 MB

요약
S개의 금화와 K의 거듭제곱만큼 가져갈 수 있다는 규칙이 주어질 때, 선공이 반드시 이기기 위해 첫 턴에 가져가야 하는 최소 개수를 구하고, 불가능하면 0을 출력한다.
난이도

보통10점 중 7점

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

문제

해적은 멋진 직업처럼 보이지만 나름의 고충이 있다. 그중 하나는 아무 일도 일어나지 않는 날 망망대해에서 오랜 시간을 보내야 한다는 것이다. 지루함을 달래기 위해 해적들은 금화로 하는 여러 놀이를 즐긴다.

그중 두 해적이 하나의 금화 더미를 두고 하는 놀이가 있다. 두 사람은 번갈아 차례를 진행하며, 자기 차례가 되면 정수 KK에 대해 KK의 거듭제곱, 즉 1,K,K2,K3,…1, K, K^2, K^3, \dots 중 하나에 해당하는 개수만큼 금화를 가져갈 수 있다. 단, 남아 있는 금화보다 많이 가져갈 수는 없다. 마지막 금화를 가져가는 해적이 이긴다.

금화 더미에 남은 금화의 개수 SS와 KK가 주어질 때, 먼저 시작하는 해적이 반드시 이기려면 첫 번째 차례에 최소 몇 개의 금화를 가져가야 하는지 구하여라. 두 해적은 모두 최선을 다해 게임을 진행한다.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다.

각 테스트 케이스는 한 줄에 두 정수 SS와 KK로 이루어진다. SS는 금화의 개수를, KK는 한 차례에 1,K,K2,…1, K, K^2, \dots개의 금화를 가져갈 수 있음을 의미한다. (1≤S≤1091 \le S \le 10^9, 1≤K≤1001 \le K \le 100)

출력

각 테스트 케이스마다, 먼저 시작하는 해적이 이기기 위해 첫 번째 차례에 가져가야 하는 금화 개수의 최솟값을 한 줄에 출력한다. 어떤 개수를 가져가도 이길 수 없다면 00을 출력한다.

예제1

  1. 예제 1

    입력
    5
    5 1
    3 2
    8 2
    50 3
    100 10
    
    예상 출력
    1
    0
    2
    0
    1