首页 > 母婴教育 > 文化教育 > 中学 >

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

来源:互联网 2023-03-20 14:41:31 108

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

程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

方法/步骤

  • 1

    使用伪随机数产生器产生一个奇数p0DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 2

    用概率性算法Miller-Rabin算法对p做一次素性检验。0DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 3

    算法如下:Miller-Rabin(p)/*p大于3且为奇数,算法输出p进行素性检验的结果*/{ 把p-1写成m*2^k的形式,其中m是一个奇数; 随机选取集合{2,…,p-1}中的一个整数n;a=n^m mod p;if(a=1) return TRUE; for(i=0;ik;i ){ if(a=p-1) return TRUE; else a=a*a mod p; } return FALSE;}。这里的格式不好读算法,可以参照下图。0DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 3该信息未经授权抓取自百度经验
  • 4

    如果p算法返回值为FALSE,表明p没有通过检验,p一定不是素数,返回步骤1;如果返回值为TRUE,表明p通过本次检验,p不是素数的概率不会多于1/40DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 5

    重复步骤2足够多次(例如S次),如果p全都通过了检测,可判定p是素数的概率至少有(1-1/4^S)。当此概率高于可接受的阈值,则可认为p是一个素数0DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 6

    这个检验只是概率性的,并不能完全确定p是素数,因此可能会产生错误的结果。但是通过提高阈值,也就是增加检验的次数,可使p不是素数的概率接近于00DJ办公区 - 实用经验教程分享!

    程序怎样才能快速地产生一个大素数?0DJ办公区 - 实用经验教程分享!

  • 注意事项

    • 步骤1产生一个随机数也可以采用其他的生成方法

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!0DJ办公区 - 实用经验教程分享!


    标签: 编程数学

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码