是eratosthenes的Sieve是从1到N生成素数的最佳算法吗?

时间:2011-03-16 17:20:02

标签: algorithm primes sieve-of-eratosthenes

我在接受采访时被问到这个问题。 我使用eratosthenes概念和数组实现了算法。

有没有更好的方法来解决这个问题 对于那些不了解筛子的人,请点击链接:

http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

编辑:在时间和空间复杂性方面最佳。 我刚刚告诉他们,SoE的缺陷是空间复杂性。 所以他们问我能不能做些什么。 以下是采访的内容: 1)实现一个从1到n打印素数的算法 Ans:我使用SoE实现 2)这是最好的方法吗? 答:???

3 个答案:

答案 0 :(得分:1)

嗯,这取决于你所说的“最好的”。 Eratosthenes的Sieve非常容易实现,但Sieve of Atkin将为您提供更好的性能。

因此,如果“最佳”意味着易于实施和理解,那么Eratosthenes就是最佳选择。如果“最佳”意味着想要展示你作为数学家的技能或者拥有一个非常快速的算法,Atkin就是你要走的路。

答案 1 :(得分:1)

好吧,它仅取决于N的值:

  • Eratosthenes的筛子(简单筛子)是一种最有效的算法,当n小于1000万(均值10 ^ 7)时,查找所有小于n的素数,因为简单筛子需要O(n)线性空间。而且我们知道我们可以制作一个最大大小为10 ^ 7的全局数组。因此,当n大于10 ^ 7时,由于大小大于10 ^ 7的数组可能无法容纳在内存中,因此简单筛面会出现问题。

  • 对于n> = 10 ^ 7,我们可以使用 Eratosthenes的分段筛网,因为在分段筛网中,我们可以将内存消耗从线性降低到 O(√n)< / strong>空间。

请注意,分段筛的时间复杂度与简单筛的相同。分段筛的唯一优势是:非常适合大型“ n”

答案 2 :(得分:0)

对于编程面试,没有:)。虽然这是http://en.wikipedia.org/wiki/Sieve_of_Atkin,但我确信那里可能有研究论文可以进行小规模的优化。