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

    传统题 1000ms 256MiB

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=n1n1n0pn=\overline{n_{\ell-1}\ldots n_1n_0}_p

其中 \ell 是表示长度。

  1. 将这个 pp 进制表示反转,得到
m=n0n1n1pm=\overline{n_0n_1\ldots n_{\ell-1}}_p
  1. mmpp 进制转回十进制,返回这个值。

现在给定 nnkk,请计算

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

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

输入格式

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

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

输出格式

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

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

的值。

数据范围

  • 1t50001\le t\le 5000
  • 1n31051\le n\le 3\cdot 10^5
  • 2k10182\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 在任何进制下都只有一位,因此对所有 p2p\ge 2 都有 rev(1,p)=1\operatorname{rev}(1,p)=1。所以答案为 102+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

cf模拟赛 #1

未参加
状态
已结束
规则
IOI(严格)
题目
7
开始于
2026-6-19 9:00
结束于
2026-6-19 11:00
持续时间
2 小时
主持人
参赛人数
3