素数相关算法(二)

原创 2004年07月11日 12:06:00

素数算法(二)

上次讨论了简单的素数判定的算法,不过这个算法对于位数较大(一般小于108)的素数判定就显得相当力不从心了。比如在素数目前最广泛的应用领域-公共密钥体系中,一般选择的素数都是相当大的(通常在100位以上),如果采用上次的试除法来判定,那么可能要穷尽你一生的时间都还不够。所以在一般的应用领域,人们采用的是Rabin-Miller检验法。下面是该检验法的算法:

首先选择一个代测的随机数p,计算b,b是2整除p-1的次数。然后计算m,使得n=1+(2^b)m。

(1) 选择一个小于p的随机数a。
(2) 设j=0且z=a^m mod p
(3) 如果z=1或z=p-1,那麽p通过测试,可能使素数
(4) 如果j>0且z=1, 那麽p不是素数
(5) 设j=j+1。如果j<b且z<>p-1,设z=z^2 mod p,然后回到(4)。如果z=p-1,那麽p通过测试,可能为素数。
(6) 如果j=b 且z<>p-1,不是素数

数a被当成证据的概率为75%。这意味着当迭代次数为t时,它产生一个假的素数所花费的时间不超过1/4^t。实际上,对大多数随机数,几乎99.99%肯定a是证据。

实际考虑:

在实际算法,产生素数是很快的。

(1) 产生一个n-位的随机数p
(2) 设高位和低位为1(设高位是为了保证位数,设低位是为了保证位奇数)
(3) 检查以确保p不能被任何小素数整除:如3,5,7,11等等。有效的方法是测试小于2000的素数。使用字轮方法更快
(4) 对某随机数a运行Rabin-Miller检测,如果p通过,则另外产生一个随机数a,在测试。选取较小的a值,以保证速度。做5次 Rabin-Miller测试如果p在其中失败,从新产生p,再测试。

经测试,这个算法在sun的Sparc II工作站上实现:
2 .8秒产生一个256位的素数
24.0秒产生一个512位的素数
2分钟产生一个768位的素数
5.1分钟产生一个1024位的素数

素数算法的优化之路

素数算法的优化之路
  • s634772208
  • s634772208
  • 2015年06月02日 12:49
  • 1238

[算法]猫扑素数的算法实现

猫扑素数的定义所谓猫扑数: 指以2开头,后面跟任意个3的十进制数。如:2、23、233等。 素数是指: 在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素(质)数。 因此,猫...
  • u011386455
  • u011386455
  • 2017年07月08日 00:01
  • 547

米勒拉宾大素数生成算法

package password;import java.math.BigInteger;public class BigPrime { public BigInteger p; st...
  • baidu_15113429
  • baidu_15113429
  • 2016年10月06日 16:52
  • 1739

算法-素数相关

素数定义: 整数p不等于0,正负1,正负p,且除了正负1,正负p外没有其他约数,那么称整数p为质数或者素数.如果不做特别说明,素数或质数指的是正整数中的质数或者素数. 问题1:判断一个数是否...
  • mydream20130314
  • mydream20130314
  • 2014年12月22日 13:39
  • 327

素数相关算法(一)

最近在网上看了不少关于素数的问题,也学习到了不少东西,决定整理一下,算是一个学习的总结吧。 首先想说明的是,虽然素数可以进行很深入的研究(如在RSA公共密钥系统的应用),但是由于我对数论的不甚熟悉,所...
  • hihihaha
  • hihihaha
  • 2004年07月09日 23:13
  • 1132

素数的相关算法

判断一个数是否为素数和 判断101-200之间有多少个素数,并输出所有素数。
  • sunrainamazing
  • sunrainamazing
  • 2017年01月19日 14:24
  • 131

算法竞赛入门经典 孪生素数

孪生素数
  • hoho_12
  • hoho_12
  • 2016年02月19日 21:31
  • 602

Miller-Rabin概率素数测试算法

本文首先鸣谢以下资料文章: 资料1 资料2 资料3 下面我们开始正文,从源头开始真正的梳理一下素数测试1.素数我们都知道,素数在当今的数论中占有非常重要的地位,主要原因就是素数最根本的性质——...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年11月05日 16:37
  • 1624

iOS 算法面试题(打印2-100之间的素数、求两个整数的最大公约数、查找字符串的位置)~demo

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 一、打印2-100之间的素数。     [cpp] view plain copy     int main(i...
  • shihuboke
  • shihuboke
  • 2017年08月13日 15:46
  • 413

判断100-200内的素数

素数判断
  • sayhello_world
  • sayhello_world
  • 2016年06月29日 17:05
  • 952
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:素数相关算法(二)
举报原因:
原因补充:

(最多只允许输入30个字)