【发布时间】:2020-09-09 21:30:19
【问题描述】:
120 的除数是 16。实际上 120 是有 16 个除数的最小数。
找到具有 2**500500 个除数的最小数。以 500500507 为模数给出答案。
计算 n 的除数很简单,例如。在 Python 中len([i for i in range(1,n+1) if n % i == 0])。这是 O(n)。
我尝试了蛮力搜索,发现 32 个除数的最小数字是 840,但对于上述问题来说太慢了。从不等式count_divisors(n) <= n来看,这个数字会很大。
你怎么看?有任何想法吗?如何计算一定除数的最小数?
编辑:我不认为这是重复的。这个问题更具体,它涉及特定类别的更多更大的数字。 other question 普遍询问。它的答案不适用于这个问题,它是一个不同的量级。
【问题讨论】:
-
[检查这个][1]。 [1]:stackoverflow.com/questions/8861994/…
-
如何通过最小除数相加直接构造数字,到达16、32时停止... // 1: 1 = 1 // 2 : 1*2 = 2 // 3 : 1*2*2 = 4 // ...
-
MrockKK 链接中的第一个答案很有用,虽然很难理解。更好的来源可能是here:您可以直接从数字的素数分解中计算除数。由于您正在寻找正好 2 除数的幂,这告诉您答案中的每个主要因素都必须比 2 的幂小一个。
-
@EmmanuelJay 这将不起作用,因为对于除数
d0<d1的数量,n=LCM(all divisors)的值不仅增加了......例如对于d=5除数最低n=16和 @ 987654331@ 除数最低n=12!!! -
有趣的事实:这个谜题要求答案以 500500507 为模(这样可以节省输入时间),但它的长度是 3078556 位。