牛客周赛58:好好好数(思维)

题目描述

         \,\,\,\,\,\,\,\,\,在上周的周赛 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;
        
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值