//本人不是用二进制来做的,找规律你会发现,第一个他的没新增加一个数,可以在前面的n个数,上都加上1,所以以k的i结尾的数的最后一个是(2*(f[i-1]+1),然后你就封装一个函数每一次都是加上k的i-1然后在减去第一个的序号,不断递归
include[HTML_REMOVED]
define ll long long
using namespace std;
const int maxn=1010;
ll N,k;
ll f[maxn];
int cnt;
ll ksm(ll a,ll b)
{
ll ans=1;
if(b==0)
return ans;
ll temp=a;
while(b)
{
if(b&1)
{
ans=temp;
}
temp=temptemp;
b=b>>1;
}
return ans;
}
ll solve(int n){
ll ans=0;
if(n==0)
return 0;
int i;
for(i=0;i<=cnt;i)
{
if(f[i]>=n)//记得找临界的条件
{
break;
}
}
ans=ksm(k,i);
if(i==0)
return ans;
else {
ans+=solve(n-(f[i-1]+1));
return ans;
}
}
int main(){
cin>>k>>N;
f[0]=1;
for(cnt=1;f[cnt-1]<=1000;cnt)
f[cnt]=2*f[cnt-1]+1;
cnt–;
cout<<solve(N)<<endl;
return 0;
}