第22章 微小的学术贡献(1 / 4)
验证一个超大数是素数除了试除法之外,还有很多别的方式。
譬如说证明一个超大数是素数的方法可以使用miller-rabin素数测试。
miller-rabin素数测试是一种概率性测试,可以高概率确定一个数是否为素数。
以下是使用miller-rabin素数测试证明一个超大数是素数的一般步骤:
选择一个适当的测试次数(通常是几十到几百次,记为k。
将待检查的超大数减1,得到数n-1。
将n-1分解为d*2^s的形式,其中d是奇数,s是非负整数。即n-1=d*(2^s)。
对于每个测试次数,选择一个随机整数a,满足1<a<n-1
计算a^dmodn,并检查结果是否为1或n-1。
如果结果是1或n-1,则进行下一次测试。
如果结果不是1且不是n-1,则进行s-1次迭代计算:计算(a^d)^2modn,依次重复。
如果在k次测试中的任何一次迭代中得到的结果不是1且不是n-1,则n不是素数。
如果在k次测试中所有迭代中都得到的结果都是1或n-1,则n很可能是素数。
需要注意的是,由于miller-rabin素数测试是概率性的,有一定的错误概率。
但是,通过增加测试次数k,可以将错误概率降低到非常小的程度。
这个过程听起来要比试除法繁琐很多。
但从计算复杂度的角度来出发,miller-rabin素数测试的时间复杂度是多项式复杂度。
具体而言,它的时间复杂度为o(k*log?(n)*(log?(n))3),其中k是测试次数,n是待检查的超大数。