码迷,mamicode.com
首页 > 其他好文 > 详细

筛素数方法(二)—— MR素数判断

时间:2018-10-29 20:10:47      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:前言   ttl   math   str   mil   情况下   nes   测试   span   

前言

\(Miller-Rabin\)素数测试是一个很好的筛素数方法,它的优点在于速度快准确性较高,但依然有可能出错。


大致思路

\(MR\)素数测试利用费马小定理快速判断一个数是否是素数,但是由于这种方法只是较高概率不出现错误,并不是完全正确的,所以在时间充裕的情况下可不必使用这个方法。


具体实现

因为当\(n\)是素数,且\(gcd(a,n)=1\)时,\(a^{n?1}\equiv1(mod\ n)\)

所以我们可以多随机几个\(a\)(用于增加算法的准确性),然后判断\(a^{n?1}\equiv1(mod\ n)\)成不成立。

由于\(n\)不是素数时\(a^{n?1}\equiv1(mod\ n)\)几乎不成立,所以如果多个\(a\)测试过后,\(a^{n?1}\equiv1(mod\ n)\)均成立,就可以认为\(n\)是素数了。

但是还有这么一种合数,对于任意\(p\)为素数,\(gcd(a,p)=1\)\(a^{p?1}\equiv1(mod\ p)\)都成立。

这种数叫做卡迈克尔数又称MR测试杀手)。

当然,这种数是很少的,在\(1\sim100000000\)范围内的整数中,只有\(255\)个卡迈克尔数。当碰到卡迈克尔数时,\(MR\)素数判断就毫无用武之地了(一个较好的方法是拿来特判)。

所以,在时间充裕的情况下,最好还是使用线性筛

筛素数方法(二)—— MR素数判断

标签:前言   ttl   math   str   mil   情况下   nes   测试   span   

原文地址:https://www.cnblogs.com/chenxiaoran666/p/Miller_Rabin.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!