CF2072G.I've Been Flipping Numbers for 300 Years and Calculated the Sum
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
经过三百年的史莱姆养殖,Akito 终于获得了魔法数字 n。当他找到商人准备兑换黄金时,商人却给了他一个任务。
商人表示,完成这个任务需要用到技能 rev(n,p),而 Akito 恰好最近学会了这个技能。rev(n,p) 表示以下操作流程:
- 将数字 n 以 p 进制表示,记作 n=nℓ−1…n1n0,其中 ℓ 是 n 的 p 进制表示的位数长度。
- 反转这个 p 进制表示,得到 m=n0n1…nℓ−1。
- 将 m 转换回十进制并作为结果返回。
商人的任务是计算总和 x=p=2∑krev(n,p)。由于这个数字可能非常大,只需要输出 x 对 109+7 取模后的余数。商人还提到,上一个旅行者计算这个和已经用了三百年仍未完成。但你一定会帮助 Akito 更快完成,对吗?
输入格式
第一行包含一个数 t(1≤t≤5000)——测试用例的数量。
每个测试用例的唯一一行包含两个数 n 和 k(1≤n≤3⋅105,2≤k≤1018)——魔法数字和求和的进制上限。
请注意,所有测试用例的 n 之和没有限制。
输出格式
对于每个测试用例,输出一个数字——x=p=2∑krev(n,p) 对 109+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=1。数字 1 在任何进制下都表示为单个数字,这意味着对于任意 p≥2 都有 rev(1,p)=1。因此,x=p=2∑k1=p=2∑101=10−2+1=9。
在第四个测试用例中,x=rev(4,2)+rev(4,3)+rev(4,4)。计算各项:
- 4=1002→rev(4,2)=0012=1
- 4=113→rev(4,3)=113=4
- 4=104→rev(4,4)=014=1
因此,x=1+4+1=6。
在第七个测试用例中,x=rev(9,2)+rev(9,3)。计算各项:
- 9=10012→rev(9,2)=10012=9
- 9=1003→rev(9,3)=0013=1
因此,x=9+1=10。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?