素数判定 Miller-Rabin 算法的实现
实验目的
通过实验掌握 Miller-Rabin 素数判定的算法。
实验原理
Miller-Rabin primality test | encyclopedia article by TheFreeDictionary
Miller-Rabin 素性测试或 Rabin-Miller 素性测试是一种概率素性测试: 一种判断给定数字是否可能为素数的算法,类似于费马素性检验和 Solovay-Strassen 素性测试。
强概要素数:对于一个给定的奇数整数 n > 2,我们把 n 写成 2 s ⋅ d + 1 2^s · d + 1 2s⋅d+1,其中 s 和 d 是正整数,d 是奇数。让我们考虑一个整数 a,称为基数,如果这些同余关系中有一个成立,那么 n 就是一个很可能的素数:
- a d ≡ 1 ( m o d n ) a^d \equiv 1 (\mod n) ad≡1(modn)
- a 2 r ∗ d ≡ − 1 ( m o d n ) a^{2^r*d}\equiv-1 (\mod n) a2r∗d≡−1(modn) for some 0 ≤ t < s 0 \leq t <s 0≤t<s
这个测试背后的想法是,当 n 是一个奇素数时,它通过测试是因为两个事实:
-
根据费马小定理 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1(\mod p) ap−1≡1(modp),(这个性质本身就定义了基于 a 的可能素数的较弱的概念,而费马检验就是基于这个概念) ;
-
1模 n 的唯一平方根是1和-1。
基本原理:令 n 表示一个整数,假设存在整数 x 和 y 满足 x 2 ≡ y 2 ( m o d n ) x^2\equiv y^2(mod n) x2≡y2(modn),但 x ≠ ± y m o d n x\neq\pm y\mod n x=±ymodn ,那么 n 是合数。而且 g c d ( x − y , n ) gcd(x-y,n) gcd(x−y,n)给出了 n 的一个非平凡因子。
Miller-Rabin 素数判定: ( n − 1 = 2 k m , m 为 奇 数 ) (n-1=2^km,m 为奇数) (n−1=2km,m为奇数)
- 如果对所有的 r ∈ [ 0 , k − 1 ] r\in[0,k-1] r∈[0,k−1],若 a m m o d n ≠ 1 a^m\mod n\neq 1 ammod