费马测试讲解

  观看了《我的第一本算法书》,学到了一些没学过的算法,且巩固了下以前学过的算法,这边讲一个,我觉得挺有意思的算法,以前都没听说过。
  素性测试是判断一个自然数是否为素数的测试。素数(prime number)就是只能被 1 和其自身整除,且大于 1 的自然数。素数从小到大有 2、3、5、7、11、13……目前在加密技术中被广泛应用的 RSA 算法就会用到大素数,因此“素性测试”在该算法中起到了重要的作用。
  费马测试被称为概率性素性测试,它判断的是“某个数是素数的概率大不大”。
  这边举个例子:5是素数,对于比5小的数,需要分别计算它们的五次方,即4的五次方=1024,3的五次方=243,2的五次方等于32,1的五次方等于1。
  接着再对结果进行模运算,即求余。1024mod5=4,243mod=3,32mod=2,1mod=1。
  通过这些计算可以推导出式子:在这里插入图片描述
  实际上不只是 5,对于任意素数p,上面的公式都是成立的。这就是“费马小定理”。根据是否满足费马小定理来判断一个数是否为素数的方法就是“费马测试”。
  通过这个算法,可以很快的知道一个数大概率是不是素数。你只需要对于要确定是不是素数的数字,随机选择几个小于该数字的几个数来用上面的式子来计算,你所选择的数字越多个,是素数的概率就越大。
  确认 n 和余数一致的次数越多,需要判断的数确实为素数的可能性就越大。但是,如果每一个小于 p 的数都要去计算,就会非常耗费时间。实际上,如果确认了几组 n 和余数之后就能判断该数是素数的可能性非常高,那么大致就可以判定该数是素数了。
  比如在 RSA 算法中,用于素性测试的是根据费马测试改进而来的“米勒 - 拉宾(Miller-Rabin)素性测试”。用这个方法重复进行测试后,当数不是素数的概率小于 0.580时,就可以大致判断该数为素数。
  注:还有个别几个数字即使符合式子也不是素数的,这些数字叫作“卡迈克尔数”(Carmichael numbers),也叫“绝对伪素数”。以下图片上的数字便是:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灼_灼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值