Special Numbers (Codeforces 1594B)
Tags: Math, bitmasks

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 $$$4^0 + 4^2 = 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 $$$10^9+7$$$.

Input: The first line contains a single integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases.The first and only line of each test case contains two integers $$$n$$$ and $$$k$$$ ($$$2 \le n \le 10^9$$$; $$$1 \le k \le 10^9$$$).

Output: For each test case, print one integer — the $$$k$$$-th special number in increasing order modulo $$$10^9+7$$$.

Note: For $$$n = 3$$$ the sequence is $$$[1,3,4,9...]$$$

Sample Inputs:
3
3 4
2 12
105 564

Sample Outputs:
9
12
3595374

Solution (Python):
import sys
MOD = 10 ** 9 + 7

def count_special_numbers(n, k):
    count = 0
    power = 1
    while k > 0:
        if k % 2 == 1:
            count = (count + power) % MOD
        k //= 2
        power = power * n % MOD
    return count

def main():
    input_lines = sys.stdin.readlines()
    t = int(input_lines[0])
    line_number = 1
    for _ in range(t):
        (n, k) = map(int, input_lines[line_number].split())
        line_number += 1
        print(count_special_numbers(n, k))
if __name__ == '__main__':
    main()

Solution (Python):
for s in [*open(0)][1:]:
    (n, k) = map(int, s.split())
    r = 0
    for x in f'{k:b}':
        r = r * n + int(x)
    print(r % (10 ** 9 + 7))

Solution (Python):
for s in [*open(0)][1:]:
    (n, k) = map(int, s.split())
    r = 0
    for x in f'{k:b}':
        r = r * n + int(x)
    print(r % (10 ** 9 + 7))