是否确定已知间隔中是否存在素数?


13

我从关于stackoverflow的帖子中看到,有一些相对较快的算法可以筛分一个数字区间,以查看该区间是否存在质数。但是,这是否意味着以下各项的总体决策问题((在区间中是否存在质数?)在P中。(该帖子有很多答案我没有看过,因此如果这个问题是一个问题,我深表歉意。重复或不必要)。

一方面,如果间隔足够大(例如),则适用Bertrand's Postulate之类的东西,并且此间隔中肯定有一个素数。但是,我也知道两个质数之间有任意大的距离(例如。 [N,2N][N!,N!+N]

即使决策问题在PI中,也看不到相应的搜索问题也很容易解决,因为那样执行二进制搜索时,我们可能无法利用素数已知分布的相同属性。

Answers:


17

所以你的问题如下:

输入:整数 问题:是否存在质数?,u
[,u]

据我所知,尚不清楚该问题是否在P中。

这是我所知道的:

  • 素数测试(给定一个数字,测试其是否为质数)在P中,因此,如果范围足够小,则可以详尽地测试范围内的每个数字以查看其是否为质数-但这不会导致通用算法。

  • 如果Cramer的猜想为真,则问题出在P。Cramer的猜想说附近的连续素数之间的距离为,因此以下算法将在P中:迭代数字,分别测试是否为质数;如果找到一个最佳的,则立即回答“是”;如果您打,请停止回答。Cramer的猜想告诉我们,您将在大多数素性测试之后停止,因此该算法将在多项式时间内运行。nO((logn)2),+1,+2,+3,uO((log)2)

    不幸的是,关于主要缺口的已知结果似乎不足以无条件地证明问题出在P中。

  • 这是另一个简单的算法:反复从选取一个随机整数,并测试它是否为素数。如果找到素数,或者尝试过每个整数但都不是素数,则停止。从经验上讲,我们应该期望这在实践中是有效的。质数定理告诉我们,如果您随机选择附近的数,则它的质数概率约为。因此,试探性地,我们应该期望在大约次迭代之后,您通常会找到一个素数并停止(如果存在)。另一方面,由于优惠券收集者的问题,如果范围内没有素数r[,u][,u]u1/lognO(logu)[,u],您将在大约次迭代后停止。因此,如果我们对素数之间最长的间隔的大小有一个很好的上限,则意味着问题出在BPP。即使没有这样的上限,随之而来的是随机问题实例也很容易。O((ul)log(ul))

  • 实际上,可以使用筛分方法来缩短运行时间(例如,避免对可被小素数整除的数字进行任何素数测试)。我不知道这是否可以导致任何渐近性改善。

  • 由于这些技术,该问题在实践中可能很容易。

  • 由于上述原因,我个人怀疑问题是否是NP完全问题。


不能用原始筛子在时间内完成吗?O(u)
Quelklef

@Quelklef,当然,但这需要指数时间(输入长度​​的指数)。我们在询问是否存在多项式时间算法,即是否存在以时间运行的算法。O(poly(logu))
DW

等待,吗?为什么不是呢?O poly u O(poly(logu))O(poly(u))
Quelklef

@Quelklef,因为数字用二进制表示,并且需要位才能用二进制表示。现在这可能已超出注释字段的范围,因此,请在其他地方提出有关“多项式时间”的含义的任何其他问题,例如,使用右上角的“问问题”按钮。谢谢!üloguu
DW

不需要,您已经清除了我的困惑。非常感谢!
Quelklef
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.