algorithm - 给定 2 个正整数 x,y 有 10^5 个十六进制数字。[x, y] 范围内所有整数的乘积的位数和是多少?
问题描述
给定 2 个正整数 x,y 有 10 5 个十六进制数字(x,y 可以是 FFF....F(长度为 10 5))。做改变:
- 计算 [x, y] 范围内所有整数的乘积。
- 计算总和,直到结果只有 1 位。
- 打印那个数字。
例如:
- [x, y] = {1BA, 1BB, 1BC, 1BD} 范围内的所有整数(十进制为 {442, 443, 444, 445})
- 所有整数的乘积为 1BA x 1BB x 1BC x 1BD = 901F21AE8(十进制为 38687349480)
- 对数字求和,直到结果只有 1 位:
- 901F21AE8 → 9 + 0 + 1 + F + 2 + 1 + A + E + 8 = 3C
- 3C → 3 + C = F
- 打印“F”
我尝试了蛮力方式(完全按照它所说的去做),但我超出了时间限制。有没有更好的算法?
解决方案
您可以通过使用多线程的“分而治之”算法来加快计算速度。将你的数字分成块,然后递归地将每个块中的所有数字相乘。
推荐阅读
- python - 如果相应的 Ids 熊猫中仅存在值,则删除 NaN
- swift - Swift 4 按键访问元组
- c++ - 分配二维数组时 cudaMalloc 崩溃
- c# - 如何获取 Datagrid SelectedItem
- java - 如何将值存储在最佳 Java 集合结构中
- javascript - 如何为 Firebase 实时数据库添加自定义键?
- java - 将 Mockito 增强类与常规类进行比较
- snakemake - 我可以添加一个文件来规则所有:在输出中未定义
- arrays - 如何从 XML 文件中读取不同大小的数组?
- javascript - 在获得响应和完整循环之前 ng-src 中的 404 错误