【问题标题】:How to find nth prime with complexity o(1)如何找到复杂度为 o(1) 的第 n 个素数
【发布时间】:2011-10-10 16:40:46
【问题描述】:

如何找到复杂度为 o(1) 的第 n 个素数

【问题讨论】:

  • 你确定有可能吗?您甚至无法在恒定时间内打印第 n 个素数。
  • 如果你能做到这一点而不首先找到所有可能的素数,那么数学之神希望收到你的来信。
  • Testing for a prime is polynomial,因此您似乎不可能比这更快地找到特定的素数。如果可以,那么您也应该能够在恒定时间内进行素数测试。
  • 也许你应该把这个问题带到 mathoverflow.net
  • 简单的答案是没有办法做到这一点。但是,如果您保留 M 个素数,如果 N

标签: algorithm math complexity-theory primes


【解决方案1】:

在 O(1) 中做到这一点的唯一方法是一个所有素数的数组。因此,您只能支持特定数量,具体取决于您计算机的内存。

编辑:

可能有一些方法可以计算这个涉及一堆微积分,但这超出了我的能力:)

【讨论】:

  • 您确定可以在恒定时间内搜索数组(未定义长度)中的数字吗?不这么认为... :-s
  • 为什么需要搜索?第 n 个素数是数组中的第 n 个索引。这是一个指向编译器的指针递增。
【解决方案2】:

你不能。事实上,如果不进行详尽的搜索,就无法枚举素数。

如果您有一个数据库,其中包含不超过 n 的所有素数,您可以在 @ 中搜索第 nth 个素数(不超过 n) 987654321@.

【讨论】:

  • 那么找到复杂度最低的第 n 个素数的最佳程序是什么?
  • -1:事实上,您可以找到第 n 个素数,而无需进行详尽的搜索。事实上,pi(x) 的快速算法允许使用类似于二分搜索的技术。
【解决方案3】:

在固定时间内找到第 n 个素数意味着有一个合理的公式来计算 pi(n)(返回第 n 个素数)。有关此主题的初步讨论,请参阅http://primes.utm.edu/notes/faq/p_n.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多