【发布时间】: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 测试的一个子集来使其具有概率性(并减少所需的时间)。
-
“概率非常小”和“大部分准确”并没有太大帮助。准确度如何,概率是多少?