题目
给定奇整数m≥3和安全参数k=5,判断m是否为合数或有1-1/2^k 概率为素数。
环境
Windows10,MinGW-W64-builds-4.3.5,miracl 7.0.1
方案设计
背景
Fermat 小定理
原理
- 给定素数p,a∈Z,则有a(p-1)≡1(mod p);
- 奇整数m,若任取一整数2≤a≤m-2,(a,m)= 1,使得a(m-1)≡1 (mod m),则m至少有1/2的概率为素数。
算法步骤
给定奇整数m≥3和安全参数k=5
(1) 随机选取整数a,2≤a≤m-2
(2) 计算g=(a, m),如果g =1,转(3);否则,跳出,m为合数
(3) 计算r =a(m-1)(mod m),如果r=1,m可能是素数,转(1);否则,跳出,m为合数
(4) 重复上述过程k次,如果每次得到m可能为素数,则m为素数的概率为 1 − 1 2 k 1- \frac1{2^k} 1−2k1 。