题意 :
- 写出从小到大第k个满足以下性质的数 :对于给定的n,可以分为若干个不同的n的幂次的和
思路 :
- 根据题意,这些数是在n进制下,每一位只能取0或者1(出现1次和不出现)的数,考虑将这些数排列,所以从小到大分别是 1,10,11,100,101
- 所以只需要先用二进制写出k,然后再用n进制解读它即可
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int _;
cin >> _;
while (_ -- )
{
ll n, k;
cin >> n >> k;
ll t = 1, ans = 0;
while (k)
{
if (k & 1) ans = (ans + t) % mod;
t = t * n % mod;
k >>= 1;
}
cout << ans << endl;
}
return 0;
}