“Miller-Rabin 测试算法”用于大素数的检测,对于较大奇数k,如果通过了 t 次素性检测,那么这个数为素数的概率大于
1−14t 1 − 1 4 t ,因此可以用此方法来检测一个数是否为素数。该算法的时间复杂度为 O(s*log(n))。
该算法基于数论的知识内容,在这里给出相关知识点。
Fermat费马小定理:
设 p 为素数,a 为任意正整数,则 ap−1 a p − 1 ≡ 1 (mod p).
平方剩余:
设 m 为正整数,a 为整数,m ∤ ∤ a。若同余方程 x2 x 2 ≡ a (mod m) 有解,则称 a 是模 m 的平方剩余;若无解,则称 a 是模 m 的平方非剩余。
Euler 判别条件:
对于 x2 x 2 ≡ a (mod p),(a, p) = 1的方程,要么无解,要么有两个解。
设 p 是奇素数,(a, p) = 1,则
(i) a 是模 p 的平方剩余的充分必要条件是 ap−12 a p − 1 2 ≡ 1 (mod p)
(ii) a 是模 p 的平方非剩余的充分必要条件是 ap−12 a p − 1 2 ≡ -1 (mod p)
当且仅当(i)成立时,同余方程有两个解。
对于该判别条件,当 a = 1 时,满足 (a, p) = 1,且也满足(i),因此有: x2 x 2 ≡ 1 (mod p) 必定有两个解。
模 p 平方根:
这里主要说明 x2