一、题面
题目链接:Special Numbers
Theofanis really likes sequences of positive integers, thus his teacher (Yeltsa Kcir) gave him a problem about a sequence that consists of only special numbers.
Let's call a positive number special if it can be written as a sum of different non-negative powers of n. For example, for n=4 number 17 is special, because it can be written as 40+42=1+16=17, but 9 is not.
Theofanis asks you to help him find the k-th special number if they are sorted in increasing order. Since this number may be too large, output it modulo 1e9+7.
Input
The first line contains a single integer t (1≤t≤1e4) — the number of test cases.
The first and only line of each test case contains two integers n and k (2≤n≤1e9; 1≤k≤1e9).
Output
For each test case, print one integer — the k-th special number in increasing order modulo 1e9+7.
Example
input
3
3 4
2 12
105 564
output
9
12
3595374
Note
For n=3 the sequence is [1,3,4,9...]
二、代码分析
一个需要记住的性质
//#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef pair<int, int> PII;
const int N = 1e6 + 7,mod=1e9+7;
void solve()
{
int t;
cin >> t;
while (t--)
{
int n, k;
cin >> n >> k;
int p = 1;
int ans = 0;
for (int i = 0; i < 31; i++)
{
if (k & (1 << i))
{
ans += p;
ans %= mod;
}
p *= n;
p %= mod;
}
cout << ans << endl;
}
}
signed main()
{
//std::ios::sync_with_stdio(false);
//cin.tie(0), cout.tie(0);
solve();
return 0;
}