程序怎样才能快速地产生一个大素数

 时间:2024-11-05 15:58:56

现螅岔出礤在许多的安全加密算法都要涉及到大素数的运算,比如RSA算法的实现需要两个随机的大素数作为秘钥的“种子”。在我们实际程序编写时,也常常需要用大素数对数据进行处理。但是,如今并没有绺从萦米可以产生任意大素数的有效技术。然而概率性检验素性方面的许多方法已经比较成熟。下面介绍Miller—Rabin算法进行素性检测。

程序怎样才能快速地产生一个大素数

方法/步骤

1、使用伪随机数产生器产生一个奇数p

程序怎样才能快速地产生一个大素数

2、用概率性算法Miller-Rabin算法对p做一次素性检验。

程序怎样才能快速地产生一个大素数

3、算法如下:Mil盟敢势袂ler-Rabin(p)/*p大于3且为奇数,算法输出p进行素性检验的结果*/{把p-1写成m*2^k的吾疣璨普形式,其中m是一个奇数;随机选取集合{2,…,p-1}中的一个整数n;a=n^mmodp;if(a=1)returnTRUE;for(i=0;i<k;i++){if(a=p-1)returnTRUE;elsea=a*amodp;}returnFALSE;}。这里的格式不好读算法,可以参照下图。

程序怎样才能快速地产生一个大素数

4、如果p算法返回值为FALSE,表明p没有通过检验,p一定不是素数,返回步骤1;如果返回值为TRUE,表明p通过本次检验,p不是素数的概率不会多于1/4

程序怎样才能快速地产生一个大素数

5、重复步骤2足够多次(例如S次),如果p全都通过了检测,可判定p是素数的概率至少有(1-1/4^S)。当此概率高于可接受的阈值,则可认为p是一个素数

程序怎样才能快速地产生一个大素数

程序怎样才能快速地产生一个大素数

6、这个检验只是概率性的,并不能完全确定p是素数,因此可能会产生错误的结果。但是通过提高阈值,也就是增加检验的次数,可使p不是素数的概率接近于0

程序怎样才能快速地产生一个大素数

怎么用python进行符号运算? c语言中gets在子函数中如何用 C语言入门问题:输入年份和月份,求该月有多少天 c#怎样调出错误控制面板 python素数判断代码
热门搜索
月亮的图片大全 一路向西2泰西电影 交通安全绘画图片 欧式吊灯图片 泰国电影晚娘