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

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

经过三百年的史莱姆养殖,Akito 终于获得了魔法数字 nn。当他找到商人准备兑换黄金时,商人却给了他一个任务。

商人表示,完成这个任务需要用到技能 rev(n,p)\text{rev}(n, p),而 Akito 恰好最近学会了这个技能。rev(n,p)\text{rev}(n, p) 表示以下操作流程:

  1. 将数字 nn 以 pp 进制表示,记作 n=nℓ−1…n1n0‾n = \overline{n_{\ell - 1} \ldots n_1 n_0},其中 ℓ\ell 是 nn 的 pp 进制表示的位数长度。
  2. 反转这个 pp 进制表示,得到 m=n0n1…nℓ−1‾m = \overline{n_0 n_1 \ldots n_{\ell - 1}}。
  3. 将 mm 转换回十进制并作为结果返回。

商人的任务是计算总和 x=∑p=2krev(n,p)x = \sum\limits_{p = 2}^{k} \text{rev}(n, p)。由于这个数字可能非常大,只需要输出 xx 对 109+710^9 + 7 取模后的余数。商人还提到,上一个旅行者计算这个和已经用了三百年仍未完成。但你一定会帮助 Akito 更快完成,对吗?

输入格式

第一行包含一个数 tt(1≤t≤50001 \le t \le 5000)——测试用例的数量。

每个测试用例的唯一一行包含两个数 nn 和 kk(1≤n≤3⋅1051 \le n \le 3 \cdot 10^5,2≤k≤10182 \le k \le 10^{18})——魔法数字和求和的进制上限。

请注意,所有测试用例的 nn 之和没有限制。

输出格式

对于每个测试用例,输出一个数字——x=∑p=2krev(n,p)x = \sum\limits_{p = 2}^{k} \text{rev}(n, p) 对 109+710^9 + 7 取模后的结果。

输入输出样例

  • 输入#1

    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

    输出#1

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

说明/提示

在第三个测试用例中,n=1n = 1。数字 1 在任何进制下都表示为单个数字,这意味着对于任意 p≥2p \ge 2 都有 rev(1,p)=1\text{rev}(1, p) = 1。因此,x=∑p=2k1=∑p=2101=10−2+1=9x = \sum\limits_{p = 2}^{k} 1 = \sum\limits_{p = 2}^{10} 1 = 10 - 2 + 1 = 9。

在第四个测试用例中,x=rev(4,2)+rev(4,3)+rev(4,4)x = \text{rev}(4, 2) + \text{rev}(4, 3) + \text{rev}(4, 4)。计算各项:

  • 4=1002→rev(4,2)=0012=14 = 100_2 \rightarrow \text{rev}(4, 2) = 001_2 = 1
  • 4=113→rev(4,3)=113=44 = 11_3 \rightarrow \text{rev}(4, 3) = 11_3 = 4
  • 4=104→rev(4,4)=014=14 = 10_4 \rightarrow \text{rev}(4, 4) = 01_4 = 1
    因此,x=1+4+1=6x = 1 + 4 + 1 = 6。

在第七个测试用例中,x=rev(9,2)+rev(9,3)x = \text{rev}(9, 2) + \text{rev}(9, 3)。计算各项:

  • 9=10012→rev(9,2)=10012=99 = 1001_2 \rightarrow \text{rev}(9, 2) = 1001_2 = 9
  • 9=1003→rev(9,3)=0013=19 = 100_3 \rightarrow \text{rev}(9, 3) = 001_3 = 1
    因此,x=9+1=10x = 9 + 1 = 10。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页