分解大于 100 位的整数

Decompose integers larger than 100 digits

本文关键字:整数 大于 分解      更新时间:2023-10-16

XY是大于 100 位的整数。找到在 [ XY [ 范围内并保证"最佳"素分解(即具有最唯一素因数的分解(的整数P

我所做的只是检查素数并分解范围内的每个数字,然后找到遵守规则的数字。还有其他方法可以做到这一点吗?

关于小整数的示例

编辑:

在上面的示例中,123456分解为
2^6 * 3^1 * 643^1,这是2 * 2 * 2 * 2 * 2 * 2 * 3 * 643,但只有3个独特的因素。

答案 123690 分解为 6 个独特因素
2^1 * 3^1 * 5^1 * 7^1 * 19^1 * 31^1 .

关于枚举素数的问题的答案总是找到一种使用筛子解决问题的方法;在您的情况下,您正在寻找具有大量因子的"反素数"数,但该原则仍然适用。

这个问题的关键是,对于大多数数字来说,大多数因素都很小。因此,我的建议是为 X 到 Y 的范围设置一个筛子,其中包含全部初始化为零的整数。然后考虑所有素数小于某个极限,尽可能大,但显然比X小得多。对于每个素数,将筛子的每个元素加 1,该元素是素数的倍数。用所有素数筛分后,计数最大的筛子位置对应于 X 和 Y 之间具有最明显素因数的数字。

让我们考虑一个例子:取范围 100 到 125,并用素数 2、3、5 和 7 进行筛分。你会得到这样的东西:

100 2 5
101 (101)
102 2 3 (17)
103 (103)
104 2 (13)
105 3 5 7
106 2 (53)
107 (107)
108 2 3
109 (109)
110 2 5 (11)
111 3 (37)
112 2 7
113 (113)
114 2 3 (19)
115 5 (23)
116 2 (29)
117 3 (13)
118 2 (59)
119 7 (17)
120 2 3 5
121 (11)
122 2 (61)
123 3 (41)
124 2 (31)
125 5

所以获胜者是105和120,每个都有三个主要因素;你必须自己决定如何处理领带。请注意,遗漏了一些因素:11 除以 110 和 121,13 除以 104 和 117,17 除以 102 和 119,19 除以 114,23 除以 115,29 除以 116,31 除以 124,37 除以 111,41 除以 123,53 除以 106,59 除以 118,61 除以 122,当然 101、103、107、109 和 113 是素数。这意味着 102、110 和 114 也并列领先,每个都有三个质因数。所以这个算法并不完美,但对于百位数范围内的 X 和 Y,假设你用素数筛选到一百万或一千万,你不太可能错过答案。

问得好。尽快在我的博客上寻找它。

按顺序(2,3,5,7...(列出所有素数,然后开始乘以它们(2 * 3 * 5 *...(,直到得到一个数字>= X。 称此号码为 P'。 如果它的 <= Y,你就完成了,P = P'。 如果没有,则开始计算 P'/2、P'/3、P'/5 等,寻找一个数字 [X,Y]。 如果你没有找到它并得到一个数字

对于较小的范围(Y-X 很小(,分配一个大小为 Y-X+1 的数组,将其归零,然后对于所有素数 <= Y-X,将一个添加到对应于素数倍数的数组元素中(简单 seive(。 然后搜索总数最大的元素。 如果总 n 是这样的 (Y-X(n>= X,那么这就是答案。 如果没有,请继续筛选大于 Y-X 的素数,直到你得到一些素数 p,使得表中某个 n 的 pn> X ...

上述两种方法之一应该有效,具体取决于范围有多大......