比较Sundaram的Sieve和Atkin的Sieve用于生成素数列表

时间:2011-03-08 17:14:16

标签: c++ algorithm primes

根据链接:http://en.wikipedia.org/wiki/Sieve_of_Sundaram,用于生成数字n的素数列表的“sundram筛”的运行时间为O(n * log(n))。这个算法是否比“阿特金筛选”更好,如果它再详细说明它是如何工作的?

2 个答案:

答案 0 :(得分:6)

理论上:

  • Sundaram的筛子具有算术复杂度O(n log n)。
  • Eratosthenes的基本筛具有算术复杂度O(n log log n)。
  • Eratosthenes筛的优化变体具有算术复杂度O(n)。
  • Atkin的筛子不仅有算术,还有比特复杂度O(n / log log n)。
  • 一个神奇的筛子,你按顺序给你的素数,需要时间O(n / log n)。

在实践中,Sundaram的筛子是如此之慢以至于没有人使用它,并且Atkin的筛子比优化的Eratosthenes变体慢(尽管它至少是竞争性的)。也许有一天阿特金或其他东西会取代Eratosthenes,但不太可能很快发生。 (此外,没有魔术般的东西。)

答案 1 :(得分:2)

嗯,Sieve of Atkin的维基百科页面说:

  

此筛使用O(N / log log N)操作

计算高达N的质数

这比Sundaram的Sieve更好,在操作中是Θ(N log N)(注意这不是O(N log N) - O()和Θ()之间存在细微的差别。