素数测试

素数测试是判断一个自然数是否为素数的一种方法。

在现在加密技术中,经常使用的“RSA加密技术”可以处理非常大的素数,就使用了素数测试。关于RSA算法可以阅读以下这个(https://www.jianshu.com/p/fbb8bf7baa97


举个例子:判断5183是不是素数。

一般通用方法,将5183除以大于2的数,看能不能整除。

5183的平方根是71.99305522062528所以按照2到71的顺序求取模操作,存在取模为0时就判断是合数不是素数。

5183 mod 2 = 1

5183 mod 3 = 2

:             :  :

5183 mod 70 = 3

5183 mod 71 = 0

一直取模操作,直到对71取模,结果为0, 所以5183不是素数,是个合数。

这种方法可以判断出一个数是否为素数,这是一种暴力的方法。但是当一个数非常大的时候,用这种办法会花掉许多的时间。

那有没有一种办法可以快速的判断一个数是否为素数呢?当然有。“费马素性检验”就是一种解决方法。

我们先了解一下素数的一些性质:

7 is 素数                

1^{^{6}} mod 7 = 1                            

2^{^{6}} mod 7 = 1                  

3^{^{6}} mod 7 = 1

4^{^{6}} mod 7 = 1      

5^{^{6}} mod 7 = 1                        

6^{^{6}} mod 7 = 1 

7^{^{6}} mod 7 = 0

费马小定理:

如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。

(解释一下,等式意思就是“”左边的“a^(p-1)”对“p”取模等于右边的“1”对“p”取模

按费马小定理,如果一个奇数n不能整除  ,则n必为合数(这是费马小定理的一个逆否命题)。但是,如果奇数n>1能整除  , n就一定是素数吗?1819年,法国数学家沙路斯发现,虽然341整除  ,但341是合数,341=11×31。这一反例表明费马小定理的逆定理不成立。事实上,费马小定理给出的是关于素数判定的必要非充分条件。若n能整除2^(n-1)-1,并n是非偶数的合数,那么n就是伪素数。它满足费马小定理,但其本身却不是素数。最小的伪素数是341。有人已经证明了伪素数的个数是无穷的。

更极端的反例是卡迈克尔数: 假设a与561互质,则 a^{560}被561除都余1。这样的数被称为卡迈克尔数数,561是最小的卡迈克尔数。已经证明证明了卡迈克尔数有无穷多个。

通过是否满足费马小定理来确定素数的方法被称为“费马素性检验”。

费马素性检验是一种素数判定法则,利用随机化算法判断一个数是合数还是可能是素数。

 让我们使用费马测试来判断数字127是否是素数。

随机取三个小于127的数字。

25^{126}  mod 127 =1

70^{126}  mod 127 =1

110^{126}  mod 127 =1

再增加几个随机数测试,随机所取得数字都满足了费马小定理。匹配得到确认的次数越多,这个数为素数的可能性越大,如果遇到了一次不满足费马测试的情况,它就不是素数。

然而,选取所有小于“p”(判断p是否为素数)的数字进行检测是非常耗时的。

实际中,检查几个数字是否满足,如果可以判断是素数的可能性足够高的话,就可以判断这是个素数。

增加随机数的选取,多做几次检验,当判断不是素数的概率小于(0.5)^{80}(0.5)^{80}(0.5)^{80}的情况下,就判断为素数。

例如,改进的费马素性检验,米勒-拉宾素性检验使用于确定RSA加密算法中的素数。

看到这里,我么已经可以了解到了:

  • 如果检测的数是一个素数,那么它一定满足所有的费马素性检验。
  • 如果检测的数是一个合数,那么它会被大部分的费马素性检验卡住;但是存在非常少的合数也会满足所有的费马素性检验(比如561,它是个合数561=1*187=11*51,但它满足所有费马素性检验,这类数就是卡迈克尔数,这类数字很少)。

素数满足所有的费马素性检验,但是即使一个数满足了所有的费马素性检验,也不能确定它一定是素数。

费马素性检验是一个概率素数确定方法。

但是,判定一个大数是否为素数目前还没有其他更有效的方法。

在实际中,一般情况下我们还是使用费马素性检验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值