米勒-拉宾素数检测(Miller-Rabin primality test)是一种概率性算法,用于检测一个数是否为素数。该算法基于费马小定理(Fermat's Little Theorem)和二次探测引理( Quadratic Reciprocity Lemma)。
米勒-拉宾素数检测的基本步骤如下:
-
分解n-1: 将n-1表示为2^r * d的形式,其中r和d是正整数,d是奇数。
-
选择随机数a: 从区间[2, n-2]中随机选择一个整数a。
-
计算x: 计算x = a^d % n。
-
判断x是否等于1或n-1: 如果x等于1或n-1,则返回“n可能是素数”。
-
计算y和z: 对于i从1到r-1,计算y = x^2 % n和z = x^(2^i * d) % n。
-
判断y和z是否等于n-1: 如果对于所有i,y和z都等于n-1,则返回“n可能是素数”。
-
返回“n不是素数”: 如果在步骤6中没有找到满足条件的y和z,则返回“n不是素数”。
米勒-拉宾素数检测是一种概率性算法,因此存在一定的误判概率。**,通过增加测试次数,可以降低误判概率。在实际应用中,通常需要多次运行算法并检查结果一致,才能认为一个数是素数。
需要注意的是,米勒-拉宾素数检测并不适用于所有情况,例如对于非常大的整数或者具有特殊性质的整数(如完全数、平方数等),该算法可能无法给出正确的结果。在这种情况下,可以考虑使用其他更精确的素数检测算法。