如何快速生成一个随机素数,肯定是1024位长?
答案 0 :(得分:25)
生成1024个随机位。使用足够强大的随机源来实现您的预期目的。
将最高位和最低位设置为1.这样可以确保没有前导零(主要候选者足够大)并且它不是偶数(绝对不是素数)。
Test for primality。如果它不是素数,请返回1.
或者,使用为您生成素数的库函数。
答案 1 :(得分:22)
使用库函数,例如OpenSSL。没有必要自己写这个。
答案 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)))