题目链接:Problem - 1594B - Codeforces
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 nn. For example, for n=4 number 17 is special, because it can be written as 4^0+4^2=1+16=17, but 9 is not.
Theofanis asks you to help him find the kk-th special number if they are sorted in increasing order. Since this number may be too large, output it modulo 109+7
Input
The first line contains a single integer tt (1≤t≤104) — the number of test cases.
The first and only line of each test case contains two integers nn and kk (2≤n≤109; 1≤k≤109).
Output
For each test case, print one integer — the k-th special number in increasing order modulo 109+7109+7.
Example
input
Copy
3 3 4 2 12 105 564
output
Copy
9 12 3595374
Note
For n=3n=3 the sequence is [1,3,4,9...]
题意:给定一个n求n的非负指数幂的和的递增序列的第k个数
思路:每个幂次最多只能取1个或者0个
n^k > n ^ 1 + ……+ n ^ (k - 1)
先判断k的奇偶性,如果是奇数就加上当前幂次,k/=2
#include<bits/stdc++.h>
using namespace std;
const int N = 1e9 + 7;
int main(){
int t;
cin >> t;
long long n, k;
while(t--){
cin >> n >> k;
long long ans = 0, cnt = 1;
for(int i = 0; i < 32; i++){
if(k & 1){
ans =(ans + cnt) % N;
}
cnt = (cnt * n) % N;
k /= 2;
}
cout << ans << endl;
}
return 0;
}