You are given an integer n and an integer k.
In one step you can do one of the following moves:
decrease n by 1;
divide n by k if n is divisible by k.
For example, if n=27 and k=3 you can do the following steps: 27→26→25→24→8→7→6→2→1→0.
You are asked to calculate the minimum number of steps to reach 0 from n.
Input
The first line contains one integer t (1≤t≤100) — the number of queries.
The only line of each query contains two integers n and k (1≤n≤1018, 2≤k≤1018).
Output
For each query print the minimum number of steps to reach 0 from n in single line.
Example
inputCopy
2
59 3
1000000000000000000 10
outputCopy
8
19
Note
Steps for the first test case are: 59→58→57→19→18→6→2→1→0.
In the second test case you have to divide n by k 18 times and then decrease n by 1.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define dd double
using namespace std;
int main() {
ll t;
cin >> t;
while (t--) {
ll n, m;
cin >> n >> m;
ll sum = 0;
ll flag = 0;
if (m > n) {
cout << n << endl;
continue;
}
else if (n == m) {
if (n == m && n == 1) {
cout << "1" << endl;
}
else {
cout << "2" << endl;
}
continue;
}
else {
while (n != 0) {
ll yu;
if (m > n) {
sum += n;
cout << sum << endl;
flag = 1;
break;
}
if (n % m == 0) {
n = n / m;
sum++;
}
else {
yu = n % m;
n -= yu;
sum += yu;
}
}
if (flag == 0) {
cout << sum << endl;
}
}
}
}