质数的验证!你了解多少(从零开始学区块链 193)

素数又称为质数,在数论领域是研究的重点,同时关于质数的产生和大数质数分解也是密码学中的重要课题,区块链世界也诞生过使用质数验证作为工作量证明的素数币本文主要科普一下关于质数的验证的几种方式,质数验证可以用于通过随机数产生大质数这类的算法。质数的验证也称为素性验证,是检验一个给定的整数是否为素数的测试,素数是除了自身和1以外,没有其它素数因子的自然数。自从欧几里得证明了有无穷个素数以后,人们就企图寻
摘要由CSDN通过智能技术生成
素数又称为质数,在数论领域是研究的重点,同时关于质数的产生和大数质数分解也是密码学中的重要课题,区块链世界也诞生过使用质数验证作为工作量证明的素数币


本文主要科普一下关于质数的验证的几种方式,质数验证可以用于通过随机数产生大质数这类的算法。


质数的验证也称为素性验证,是检验一个给定的整数是否为素数的测试,素数是除了自身和1以外,没有其它素数因子的自然数。自从欧几里得证明了有无穷个素数以后,人们就企图寻找一个可以构造所有素数的公式,寻找判定一个自然数是不是素数的方法。因为素数的地位非常重要。鉴别一个自然数是素数还是合数,这个问题在中世纪就引起人们注意,当时人们试图寻找质数公式,到了高斯时代,基本上确认了简单的质数公式是不存在的,因此,高斯认为对素性判定是一个相当困难的问题。从此以后,这个问题吸引了大批数学家。 素性判断算法可分为两大类,确定性算法及随机算法。前者可给出确定的结果但通常较慢,后者存在偶然不确定结果但是速度较快。


确定性算法


试除法(埃拉托斯特尼筛法)

尝试从2到的平方根n整数是否整除N。给定一个合数n(这里,n是待分解的正整数),试除法看成是用小于等于平方根n的每个素数去试除待分解的整数。如果找到一个数能够整除除尽,这个数就是待分解整数的因子。试除法一定能够找到n的因子。因为它检查n的所有可能的因子,所以如果这个算法“失败”,也就证明了n是个素数。试除法效率非常低,对于小质数的验证可用,大质数一般不适用这种方法。


卢卡斯-莱默检验法

数学中,卢卡斯-莱默检验法是检验梅森数的素性检验,是由爱德华·卢卡斯于1878年完善,德里克·亨利·莱默随后于1930年代将其改进。因特网梅森素数大搜索用这个检验法找到了不少很大的素数,最近几个最大的素数就是这个项目发现的。由于梅森数比随机选择的整数更有可能是素数,因此他们认为这是一个极有用的方法。卢卡斯-莱默检验法原理是这样:令梅森数 Mp = 2p− 1作为检验对象(预设p是素数,否则Mp就是合数了)。


AKS素数测试

AKS素数测试(又被称为Agrawal–Kayal–Saxena素数测试和Cyclotomic AKS test)是一个决定型素数测试算法 ,由三个来自印度坎普尔理工学院的计算机科学家,Manindra Agrawal、Neeraj Kayal和Nitin Saxena,在2002年8月6日发表于一篇题为素数属于P的论文。作者们因此获得了许多奖项,包含了2006年的哥德尔奖和2006年的Fulkerson Prize。这个算法可以在多项式时间之内,决定一个给定整数是素数或者合数。


AKS最关键的重要性在于它是第一个被发表的一般的、多项式的、确定性的和无仰赖的素数判定算法。先前的算法至多达到了其中三点,但从未达到全部四个。


1、AKS算法可以被用于检测任何一般的给定数字是否为素数。很多已知的高速判定算法只适用于满足特定条件的素数。例如,卢卡斯-莱默检验法仅对梅森素数适用,而Pépin测试仅对费马数适用。


2、算法的最长运行时间可以被表为一个目标数字长度的多项式。ECPP和APR能够判断一个给定数字是否为素数,但无法对所有输入给出多项式时间范围。


3、算法可以确定性地判断一个给定数字是否为素数。随机测试算法,例如米勒-拉宾检验和Baillie–PSW,可以在多项式时间内对给定数字进行校验,但只能给出概率性的结果。


4、AKS算法并未“仰赖”任何未证明猜想。一个反例是确定性米勒检验:该算法可以在多项式时间内对所有输入给出确定性结果,但其正确性却基于尚未被证明的广义黎曼猜想。


随机算法


费马素性检验

利用费马小定理来测试一个数是否是素数的方法

根据费马小定理:如果p是素数, 1 ≤ a ≤ p − 1 ,那么

  • a p − 1 ≡ 1 ( mod  p )

如果我们想知道n是否是素数,我们在中间选取a,看看上面等式是否成立。如果对于数值a等式不成立,那么n是合数。如果有很多的a能够使等式成立,那么我们可以说n可能是素数,或者伪素数。在我们检验过程中,有可能我们选取的a都能让等式成立,然而n却是合数。这时等式

  • a n − 1 ≡ 1 ( mod

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值