题目描述
\,\,\,\,\,\,\,\,\,在上周的周赛 Round 57\textsf {Round 57}Round 57 中,双好数的构造题非常有趣,于是,在这周的周赛中,好数又回来了!但是其实这两题并没有什么关系,还是重新看看题吧!
\,\,\,\,\,\,\,\,\,小苯有一个数字 nnn ,他定义 k-\texttt{k-}k- 好数为:可以表示为若干个不同的 kkk 的整数次幂之和的数字。
\,\,\,\,\,\,\,\,\,例如:30=33+3130 = 3^3+3^130=33+31 ,因此 303030 是一个 3-\texttt{3-}3- 好数,而 222 不是一个 3-\texttt{3-}3- 好数(虽然有:2=30+302=3^0+3^02=30+30,但好数要求次幂数字不同)。
\,\,\,\,\,\,\,\,\,小苯有一个整数 nnn,他想知道 nnn 最少可以被表示成几个 k-\texttt{k-}k- 好数的和,请你帮帮他吧。
输入描述:
\,\,\,\,\,\,\,\,\,每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤104)T\left(1\le T\le 10^4\right)T(1≤T≤104) 代表数据组数,每组测试数据描述如下:
\,\,\,\,\,\,\,\,\,在一行上输入两个整数 n,k (1≤n≤1018) , (1≤k≤1018)n, k\ (1 \leq n \leq 10^{18})\ ,\ (1 \leq k \leq 10^{18})n,k (1≤n≤1018) , (1≤k≤1018) ,表示小苯的数字 nnn 、k-\texttt{k-}k- 好数的 kkk 。
输出描述:
\,\,\,\,\,\,\,\,\,在一行上输出一个整数,代表最少可以将 nnn 分解成 k-\texttt{k-}k- 好数的个数。
示例1
输入
复制2 60 3 114 514
2 60 3 114 514
输出
复制2 114
2 114
说明
\,\,\,\,\,\,\,\,\,对于第一组测试数据,303030 是 3-\texttt{3-}3- 好数,而 60=30+3060=30+3060=30+30 ,因此可以分解为两个 3-\texttt{3-}3- 好数,可以证明不存在更优的分解方式。
做法
把n转化为k进制数,答案就是数字最大的那位数。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int n,k;
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&k);
if(k==1){
cout<<1<<endl;
continue;
}
int res=0;
while(n){
res=max(res,n%k);
n/=k;
}
cout<<res<<endl;
}
}