最快素数测试(可以是概率性的)

Fastest prime test (can be probabilistic)

我正在寻找检查数字是否为质数的最快算法。只要失败的可能性很小,算法就不必是确定性的。最好应该可以通过某些参数来控制失败的可能性,例如 "iteration count".

该算法适用于 <= 10^18 的整数就足够了,但如果它适用于 C++ unsigned long long 可表示的所有整数,假设它是 64 位 (18,446,744,073,709,551,615),那会更好.

已经有一些这样的问题,但它们要求算法是确定性的,而对我来说,如果它是概率性的,只要它 "mostly accurate".

我相信 Miller-Rabin 素性测试算法完全符合您的需求。

部分资源:

Miller-Rabin Wikipedia

Implementation and extra information

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

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

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