随机素数

时间:2009-11-20 10:45:52

标签: algorithm random numbers primes

如何快速生成一个随机素数,肯定是1024位长?

6 个答案:

答案 0 :(得分:25)

  1. 生成1024个随机位。使用足够强大的随机源来实现您的预​​期目的。

  2. 将最高位和最低位设置为1.这样可以确保没有前导零(主要候选者足够大)并且它不是偶数(绝对不是素数)。

  3. Test for primality。如果它不是素数,请返回1.

  4. 或者,使用为您生成素数的库函数。

答案 1 :(得分:22)

使用库函数,例如OpenSSL。没有必要自己写这个。

示例:http://ardoino.com/7-maths-openssl-primes-random/

答案 2 :(得分:3)

1024很多。 你确定概率素数不会吗? 概率素数生成器是JDK的一部分

答案 3 :(得分:2)

您没有指定上下文/语言/平台..如果您想使用类似unix / linux的系统和shell,您可能会考虑涉及OpenSSL版本> = 1.0.0的解决方案:

$ openssl prime -generate -bits 1024
140750877582727333214379261853877378646889234118675380673028200387281415297520423589261211081966230040412916644372766351028035798201654335110081318739796178745233127842988596480299276295476504358587725867882394416543075082108266054273016211760684113070285409887820598314292803190900634009988950624354964653677

如果得到相同的结果,那么宇宙就会出现问题。

如果您喜欢十六进制系统,请添加-hex选项。

答案 4 :(得分:0)

为了换取内存以获得速度,您可以生成它们并将它们存储在列表中,然后随机选择一个。

编辑: 当然,你无法生成它们所以你可以实现的最好的是伪随机性和高内存成本。如果你想要它的安全性,这也不好。

答案 5 :(得分:0)

PARI/GP中:

randomprime([2^1023,2^1024])

如果您想在“图书馆模式”

中执行此操作
#include <pari/pari.h>
// ...
randomprime(mkvec2(int2u(1023), int2u(1024)))