从题意上看,每个数都是由n的幂相加而成,并且每个幂只能加一次,并且这个数列是从小到大排列,很容易就想到利用二进制模式,二进制的数非0则1,刚好满足上述条件,并且计算的话只用改变每一位的权值就行了
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
long long k,n;
void init()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
}
void readdata()
{
scanf("%I64d%I64d",&k,&n);
}
long long cal(long long x)
{
long long ret=0,tmp=1;
while(x)
{
if(x&1)
ret+=tmp;
tmp*=k;
x>>=1;
}
return ret;
}
void work()
{
long long ans=cal(n);
printf("%I64d",ans);
}
int main()
{
//init();
readdata();
work();
return 0;
}