直到啥数字可以在 5 秒内找到给定数字的除数 [关闭]

Posted

技术标签:

【中文标题】直到啥数字可以在 5 秒内找到给定数字的除数 [关闭]【英文标题】:Till what number is finding the divisors of a given number possible in under 5 seconds [closed]直到什么数字可以在 5 秒内找到给定数字的除数 [关闭] 【发布时间】:2017-06-15 11:22:31 【问题描述】:

我得到一个数字n <= 10^85,我想计算给定n 的所有除数。

我可以在5 秒内计算出所有除数到多少?

我知道所选算法的执行时间取决于运行它的硬件。假设它是在一个普通的开发者电脑上运行的,我不期望我可以计算出一个确切的数字,粗略的估计就足够了。

我查看了几种寻找除数的算法,并说服自己答案一定是< 10^85

The algorithm I looked at.

How I tried to estimate the time(我用了上面算法的运行时间)

【问题讨论】:

为什么? (如果您想搞笑,请不要回答并删除您的评论) 【参考方案1】:

您的第一个链接显示 1.6 GHz UltraSparc III 需要 35 分钟才能分解 267 位半素数。一个 267 位的数小于 1081,所以它比 1085 小了四个数量级。 1.6 GHz UltraSparc 不是典型的台式机,至少不是我住的地方,但我们可以假设在典型台式机上运行的 msieve 会有类似的性能。除非您觉得可以以几千倍的速度重新实现 msieve,否则您似乎不太可能在 5 秒内分解一个 85 位数字。

对于它的价值,在我的 core-i5 笔记本电脑上 msieve 花了 124 秒来分解 76 位半素数 1031024382763741345720693024144503046286361588371249770826450615723688608887,这是两个 38 位素数的乘积。在 5 秒内,它能够完成 62 位半素数 7308332279578159953175572146691794473667384671982397578861693,这是 32 位素数和 30 位素数的乘积。 [注1]

您的第二个链接——“如何估计时间”——毫无意义。时间估计不以任何特定单位计量;它只是一个增长率的指标。如果一个算法在 Θ(f(n)) 中运行,而您将 f(n) 计算为 1000(或 8.61036E20),那么您基本上一无所知:该算法可能需要 1000 纳秒,也可能需要 1000 年。

注意事项

    我通过使用 msieve 分解 20 个随机 128 位数字找到了这些半素数,这给了我六个具有 30 个或更多十进制数字的素数。

【讨论】:

感谢您纠正我用渐近界计算实际运行时间的尝试,这很愚蠢:p 为了将来参考,我在这里找到了我想要的东西:gap-system.org/Manuals/pkg/factint/doc/chap4.html

以上是关于直到啥数字可以在 5 秒内找到给定数字的除数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

javascript 计算给定数字的所有除数。

FF 的除数(计算给定数的除数乘积的除数)

成对的友好数字

力扣——自除数

leetcode 728. 自除数

有没有办法优化此代码以查找数字的除数?