#CF2072G. I've Been Flipping Numbers for 300 Years and Calculated the Sum

I've Been Flipping Numbers for 300 Years and Calculated the Sum

题目描述

给定一个正整数 nn。对于一个进制 pp,定义 rev⁡(n,p)\operatorname{rev}(n,p) 为下面的操作结果:

  1. 将 nn 写成 pp 进制表示,记为
n=nℓ−1…n1n0‾pn=\overline{n_{\ell-1}\ldots n_1n_0}_p

其中 ℓ\ell 是表示长度。

  1. 将这个 pp 进制表示反转,得到
m=n0n1…nℓ−1‾pm=\overline{n_0n_1\ldots n_{\ell-1}}_p
  1. 把 mm 按 pp 进制转回十进制,返回这个值。

现在给定 nn 和 kk,请计算

x=∑p=2krev⁡(n,p)x=\sum_{p=2}^{k}\operatorname{rev}(n,p)

由于答案可能很大,只需要输出 xx 对 109+710^9+7 取模后的结果。

输入格式

第一行包含一个整数 tt,表示测试用例个数。

接下来 tt 行,每行包含两个整数 n,kn,k。

输出格式

对于每个测试用例,输出一行一个整数,表示

$$\sum_{p=2}^{k}\operatorname{rev}(n,p)\bmod (10^9+7)$$

的值。

数据范围

  • 1≤t≤50001\le t\le 5000
  • 1≤n≤3⋅1051\le n\le 3\cdot 10^5
  • 2≤k≤10182\le k\le 10^{18}
  • 多个测试用例中 nn 的总和没有额外限制。

样例

输入

12
3 2
42 52
1 10
4 4
16 2
69 69
9 3
19 84
9982 44353
100000 1000000007
17 30
777 1000000000000000000

输出

3
7594
9
6
1
33471
10
2006
120792461
584502117
775
46058362

样例解释

第三个测试用例中,n=1n=1。数字 11 在任何进制下都只有一位,因此对所有 p≥2p\ge 2 都有 rev⁡(1,p)=1\operatorname{rev}(1,p)=1。所以答案为 10−2+1=910-2+1=9。

第四个测试用例中:

  • 4=10024=100_2,反转后为 0012=1001_2=1;
  • 4=1134=11_3,反转后仍为 113=411_3=4;
  • 4=1044=10_4,反转后为 014=101_4=1。

因此答案为 1+4+1=61+4+1=6。