CFCF2153E.Zero Trailing Factorial
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
对于所有正整数 x≥1 和 k≥2,定义 vk(x!) 表示在 x!=x⋅(x−1)⋯1 的 k 进制表示下末尾零的个数。形式上,vk(x!) 被定义为最大的整数 i,使得 ki 整除 x!。
对于一个质数 p,可以通过公式 vp(x!)=j=1∑∞⌊pjx⌋ ∗ 计算。如果 k 不是质数,将其素因数分解为 k=∏piei,其中 pi 是不同的质因子,ei 是对应的指数。此时,
vk(x!)=imin⌊eivpi(x!)⌋.
对于任意两个正整数 a 和 b,以及任意整数 k≥2,定义数对 (a,b) 在 k 下的权重 wk(a,b),如下:
wk(a,b)={min(vk(a!),vk(b!))10100if vk(a!)=vk(b!);otherwise.
进一步,定义 fm(a,b) 为 k 取遍 2≤k≤m 时 (a,b) 的最小权重:
fm(a,b)=2≤k≤mminwk(a,b).
现给定两个整数 n 和 m,你的任务是计算 ∑1≤x≤n−1fm(x,n)。
可以证明,在给定约束下,结果严格小于 10100。
∗ 这里 ⌊y⌋ 表示 y 的 向下取整,即小于等于 y 的最大整数。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤100),表示测试用例的组数。
每组测试数据的一行包含两个整数 n 和 m(2≤n≤m≤107)——分别表示函数的参数。
注意,所有测试数据中 n 和 m 的总和没有额外限制。
输出格式
对于每组测试数据,输出一行一个整数,表示 1≤x≤n−1∑fm(x,n) 的结果。
输入输出样例
输入#1
5 3 5 6 7 6 10 36 68 10000000 10000000
输出#1
0 1 0 13 279933
说明/提示
在第一个测试点中,考虑 k=3≤5:
- v3(1!)=v3(2!)=0,因为 3 不能整除 1! 与 2!。
- v3(3!)=v3(6)=1,因为 3 能整除 6,但 32=9 不能。
因此,w3(1,3)=w3(2,3)=min(0,1)=0。可以证明这是所有 2≤k≤5 中的最小权重,所以 f5(1,3)=f5(2,3)=0。
在第二个测试点中,可以证明 f7(1,6)=f7(2,6)=f7(3,6)=f7(4,6)=0。对于 f7(5,6),考虑 k=6≤7:
- v6(5!)=v6(120)=1,因为 6 能整除 120,但 62=36 不能。
- v6(6!)=v6(720)=2,因为 36 能整除 720,但 63=216 不能。
因此 w6(5,6)=min(1,2)=1。可以证明这是所有 2≤k≤7 中的最小权重,所以 f7(5,6)=1。
注意:选择 k=7≤7 无法取得更优,因为 v7(5!)=v7(6!)=0,这时 w7(5,6)=10100。
在第三个测试点中,可以证明 f10(1,6)=f10(2,6)=f10(3,6)=f10(4,6)=0。对于 f10(5,6),考虑 k=9≤10:
- v9(5!)=v9(120)=0,因为 9 不能整除 120。
- v9(6!)=v9(720)=1,因为 9 能整除 720,但 92=81 不能。
因此 w9(5,6)=min(0,1)=0。可以证明这是所有 2≤k≤10 的最小权重,所以 f10(5,6)=0。