我得到一个数字n <= 10^85
,我想计算给定n
的所有除数。
我可以在5
秒内计算所有除数?
我知道选择任何算法的执行时间取决于它运行的硬件。假设它是在avarage开发者pc上运行的,我并不期望能够计算除数的确切数字,粗略估计就足够了。
我查看了几种用于找到除数的算法,并确信我的答案必须是< 10^85
。
How I tried to estimate the time(我使用了上述算法的运行时间)
答案 0 :(得分:1)
您的第一个链接表示,1.6 GHz UltraSparc III需要35分钟才能计算出267位的半数。 267位数小于10 81 ,因此它比10 85 小4个数量级。 1.6 GHz UltraSparc不是典型的台式机,至少不是我居住的地方,但我们可以假设在典型台式机上运行的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年。