铅笔小说网
会员书架
首页 > 都市言情 > 学霸的另类养成 > 第22章 微小的学术贡献

第22章 微小的学术贡献(1 / 2)

章节目录 加入书签
好书推荐: 我是尸化天师 试炼在影视世界 在小叮当里的漫画家 冰河世纪之超神战车 NBA:传奇主帅,联盟签到十年 四合院:开局阎解旷,我谁都坑 青知锦 初景道君 乾坤未定苦为舟 离岸人

验证一个超大数是素数除了试除法之外,还有很多别的方式。

譬如说证明一个超大数是素数的方法可以使用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是待检查的超大数。

在miller-rabin素数测试中,迭代次数是由测试次数k决定的。

每次迭代的计算包括取模运算和幂运算,它们的复杂度都是多项式级别的。

与指数复杂度的算法相比,多项式复杂度的算法在处理超大数时更加高效。

尽管miller-rabin素数测试是一种概率性测试,但随着测试次数的增加,错误概率可以降低到极小的程度。

虽然miller-rabin素数测试具有多项式时间复杂度,但如果是对于比超大数还要大的数(也就是是说对于一些动辄千万位的数非常大的数,想要验证其是不是素数仍然需要相当大的计算资源和时间才能完成测试。

甚至于在实际应用中,常常会结合其他优化技术和算法来提高素数测试的效率。

而如何验证一个数是不是梅森素数呢?

首先梅森素数也是素数的一种。

因此要先判定这个数是素数。

而后再验证这个数是否符合梅森素数的定义。

具体来说,可以依靠lucas-lehmer测试即卢卡斯-莱默检验法。

卢卡斯-莱默检验法(lucas-lehmertest是一种用于验证梅森素数的特定形式的素数测试方法。

它仅适用于梅森素数的验证(形如2^p-1的素数,其中p是一个素数。

卢卡斯-莱默检验法的原理如下:

初始化s=4。

重复进行以下步骤p-2次:计算s的平方减去2,并将结果对2^p-1取模,即s=(s^2-2)%(2^p-1)。

如果最终得到的s等于,则该数2^p-1是素数;否则,它不是素数。

卢卡斯-莱默检验法是一种确定性的测试方法,可以准确判断形如2^p-1的数是否为素数。

点击切换 [繁体版] [简体版]
章节目录 加入书签
新书推荐: 重生之我为饕餮 别跪求,少挽留,苏小姐转投小狼狗枕头 离婚后,我被烂片女王觊觎了 团宠六岁半,六个哥哥宠翻小奶包 再少年 前方修罗场预警[快穿] 舔完就跑,高冷女神后悔哭了 重生1979:开局迎娶落魄千金 重生八十年代 诱情染指,疯批宠娇入怀