随机算法 素数测试

素数测试

费马定理进行素数测试
如果n不能整除a则有a^(n-1) mod n = 1,通过判断费马定理的模等式是否成立就可以判断
一个数是不是合数(显然,如果一个数是合数那么等式一定不成立)但是,如果等式成立,
n还是有可能是合数(伪素数:1387等)。

MillerRabin素数测试
基于:1,a^(n-1) mod n = 1,2,x^2 mod n = 1;
通过以下几个手段达到更好的测试效果:
1, 随机选择a
2, 如果在运行a^(n-1) mod n = 1的过程中,发现x^2 mod n = 1成立,那么n肯定是
合数,就没有必要继续下去。通过一下具体过程实施:
将a^(n-1) mod n = 1中的幂n-1分成n-1=2^t*u,基于a^(xy)mod n = ((a^x)mod n *(a^y)mod n)mod n,
所以先算m = a^u,然后在循环中计算p = (m^(t/2)*m^(t/2))mod n这样,如果p=1,
并且m^(t/2)!=1&&m^(t/2)!=n-1则根据x^2 mod n = 1,有n一定是一个合数。这样就不需要继续测试下去了。

MillerRabin素数测试程序:点击此处

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值