【问题标题】:Better algorithm to find nth prime number?找到第n个素数的更好算法?
【发布时间】:2017-11-27 19:45:18
【问题描述】:

到目前为止,我一直在使用 Eratosthenes 筛来生成所有“n”个素数。

但是,我想知道是否存在更好的算法,或者我们可以改进现有的性能更好的算法吗??

【问题讨论】:

  • 要找到第 N 个素数,您需要检查 (N-1) 个较小的素数。为此,最好使用筛子。
  • @rossum,这不是真的。没有找到之前的素数,就可以找到第 N 个素数。
  • 正是我的想法。但是,还有一个 Sundaram 筛子,稍微好一点。但是,我想知道另一种有效的算法
  • 要生成许多素数,最好使用筛子。在实践中,Eratosthenes 的分段筛是最快的(包括 Atkin、Sundaram 和整体 SoE)。但是对于第 n 个素数,我们不需要全部生成。
  • 参见。 stackoverflow.com/questions/9625663/…(搜索“快捷方式”)。

标签: primes sieve-of-eratosthenes


【解决方案1】:

对于足够大的N(例如超过一百万左右),最好的算法是使用近似值(例如对数积分或黎曼R函数),然后使用LMO等快速素数计数方法,然后筛选出小的余。这比筛分快很多数量级。

https://math.stackexchange.com/questions/507178/most-efficient-algorithm-for-nth-prime-deterministic-and-probabilistic

至少有两个开源实现。

后者超越了前者,也是多线程的。

添加:Will Ness 还指出了 Daniel Fischer 的一篇不错的帖子,其中提供了解决此问题的不同方法的演练:Calculating and printing the nth prime number

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多