【问题标题】:Fastest prime test (can be probabilistic)最快的素数测试(可以是概率的)
【发布时间】:2019-10-20 18:12:36
【问题描述】:

我正在寻找最快的算法来检查一个数字是否是素数。只要失败的可能性很小,算法就不必是确定性的。最好应该可以通过“迭代次数”等参数来控制失败的可能性。

该算法适用于整数 unsigned long long 可表示的所有整数,假设它是 64 位 (18,446,744,073,709,551,615),那就更好了。

已经有一些类似的问题,但它们要求算法是确定性的,而对我来说,如果它是概率性的,只要它“大部分准确”就可以了。

【问题讨论】:

  • 您在询问之前有没有尝试查找一些资源? en.wikipedia.org/wiki/Primality_test#Probabilistic_tests
  • @slepic 我做了,但似乎没有说哪个最快
  • @YanB。如果您按照各个测试的维基百科链接,它将为您提供有关时间复杂度的信息。不过,这里的数字确实相对较小,所以这可能不那么相关。在问题中,我明确讨论了高达 64 位数字的案例,尽管假设测试是准确的。您可以通过仅测试 Miller-Rabin 测试的一个子集来使其具有概率性(并减少所需的时间)。
  • “概率非常小”和“大部分准确”并没有太大帮助。准确度如何,概率是多少?

标签: c++ algorithm primes


【解决方案1】:

正如其他人所说,考虑 Miller-Rabin 测试。

这是一个测试小于2^64的数字的链接:https://www.techneon.com/

每个候选人最多必须测试三个不同的碱基。要获得概率但要快约三倍的东西,只需检查从这三个中随机选择的一个。

【讨论】:

    【解决方案2】:

    我相信 Miller-Rabin 素性测试算法非常适合您的需求。

    一些资源:

    Miller-Rabin Wikipedia

    Implementation and extra information

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2010-10-13
      • 2014-03-31
      • 2013-10-13
      • 2011-02-04
      • 2021-10-07
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多