随机算法 MillerRabin素数测试是3/4正确的蒙特卡洛算法

随机算法 MillerRabin素数测试是3/4正确的蒙特卡洛算法

为什么MillerRabin素数测试优于简单利用费马定理的测试呢?
当我们利用费马小定理测试一个数是否是素数的时候,如果返回假,那么100%确定这
个数是合数,但是如果返回值是真,有多少出错的可能呢。如果a^(n-1)mod n =1并
且n是一个合数那么这个a就叫做n的一个假见证,我们做个这样的一个统计,在小于1000
的奇合数中有多少个假见证呢。
小于1000的奇合数有332个,在这332个奇合数中仅有5个数没有假的见证,
超过一半的有两个假见证,只有16%的有超过15个假见证。
一共有4490个假见证。但是总共有172828个见证可以选择。
所以总之,小于1000的奇合数,出错的可能是3.3%,而在更大的数域内出错的概率会降低。
但是并不是每一个奇合数都只有少量的假见证,有的数有很多的假见证,所以特别的对这种
数出错的概率是很大的,例如:561有318个假见证,再如对于这个15位的数651693055693681,
出错的概率为99.9965%,所以说如果费马小定理测试法是p-correct的,那么这个p值是不确定的。

但是基于MillerRabin的素数测试呢?
考虑,测试算法中的witness(a,n)如果返回真,那么n一定是合数,如果返回假,那么n是素数
的概率有多大呢?对于任意的a如果witness(a,n)返回假,那么当且仅当a属于B(n)。如果n是
一个奇合数,那么如果a属于B(n),则,a叫做n的强假见证,可以预见的是强假见证个数比假见
证更为稀少,具体的在小于1000的数中,随机选择一个数是强假见证的概率小于1%,超过72%的
奇合数没有强假见证
不加证明的给出以下定理
【如果n是素数则有B(n)={a|2<=a<=n-2},如果n是合数则有|B(n)|<=(n-9)/4】
所以MillerRabin素数测试算法是一个3/4正确的蒙特卡洛算法,如果k次运行该算法,则
出错的概率可以降低到(1/4)^k。这是一个相当理想的结果了。

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