随机算法 素数测试

素数测试

费马定理进行素数测试
如果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素数测试程序:点击此处

 

 

你可能感兴趣的:(算法,测试)