费马测验检测素数
费马小定理是数论中的一个定理:假如a是一个整数,p是一个素数,那么
如果a不是p的倍数,这个定理也可以写成
根据费马小定理,对于两个互质的素数N和P,必有:N^(P-1)%P=1
素数检测:对于给定的整数n,随机取一个a<n并计算出a^n取模n的余数。如果得到的结果不等于a,那么a就肯定不是素数。如果结果是a,那么n是素数的机会就很大,但也可能不是,因为有基于Carmichael数的稀有特性。费马小定理有另一种形式:如果p是素数,那么对于比p小的正整数a,a^(p-1) mod p = 1。这个性质是Carmichael数不具备的,只有和Carmichael数p互质的a才满足a^(p-1) mod p = 1。这意味着我们可以改进用费马小定理判断素数的算法,计算a^(p-1) mod p而不是a^p mod p,判断结果是不是等于1。当然得出p是素数但是判断错误的可能性仍然存在。现在就再取一个随机的a并采用同样的方式检查。如果同样满足条件,那么n是素数的可能就更大。通常测试的次数越多越准。这一算法就是费马检查。
参考:
Harold Abelson 《计算机程序的构造和解释(第2版 )》 机械工业出版社
http://www.cnblogs.com/knuth/archive/2009/09/04/1559949.html
http://rimerandzerah.spaces.live.com/blog/cns!fbc88b2a60495c5e!149.entry?sa=100108712
浙公网安备 33010602011771号