c – 分解大于100位的整数

X和Y是大于100位的整数.找到在[X,Y [并且保证“最佳”主要分解(即具有最独特的素因子的分解)的范围内的整数P.

我所做的只是检查素数并分解范围内的每个数字,并找到尊重规则的数字.有没有其他方法可以做到这一点?

An example on small integers

编辑:

在上面的例子中,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和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,假设你按照素数筛选到一百万或一千万,你不太可能会错过答案.

好问题.请在my blog快速查找.

点赞