数论知识
欧拉定理
aϕ(n)≡1(mod n)a与n为正整数且互质
费马小定理
若p为素数,且存在a与p互质(任意的a<p都满足),此时
ϕ(p)=p−1,根据欧拉定理有,
ap−1≡1(mod n)
二次探测定理
已知p为素数且
x<p考虑方程
x2≡1(mod p)有解,则
x=1或者
x=p−1
证明:
x2−1≡0(mod p)(x+1)(x−1)=k∗p
当
k=0时,
x=1;当
k=1时,
x=p−1;当
k>1时,不存在
x<p
素性测试
费马测试
费马小定理毕竟只是素数判定的一个必要条件,并非充分条件。下面我们定义卡迈克尔数:
若合数n且任意与n互质的a,都有
an−1≡1(mod n),则n被称为卡迈克尔数。
我们做费马测试时,可能对目标p进行测试,选择不同的基数如2(令a=2)
- 通过基数为2费马测试,则很大概率为素数(注意通过基数为2的费马测试的合数不一定是卡迈克尔数,因为卡马克尔数是对任意与n互质的a),称为以2为基的伪素数
- 否则,必为合数
Miller-Rabin素性测试
Miller-Rabin素性测试为概率性算法,操作对象是我们从费马测试得到的以2为基的伪素数,有
2n−1≡1(mod n)。
假设p为素数,此时对照二次探测定理,有
x12=2n−1(mod n),则有
x1=22n−1,此时
x1=1或
x1=n−1。综上,
x1≡1(mod n)。
递归下去,令
x22=x1,有
x22≡1(mod n),此时
x2=x121=222n−1,此时
x2≡1(mod n)
这样一直检验下去…
代码实现
//TODO:
更多参考(很有很多要补充的)
https://blog.csdn.net/ltyqljhwcm/article/details/53045840
https://www.xuebuyuan.com/552593.html
http://www.cnblogs.com/TenosDoIt/p/3398112.html
http://blog.chinaunix.net/uid-21712186-id-1818141.html