16

確かに1024ビット長の乱数をすばやく生成するにはどうすればよいですか?

4

6 に答える 6

25
  1. 1024個のランダムビットを生成します。意図した目的に対して十分に強力なランダムソースを使用してください。

  2. 最上位ビットと最下位ビットを1に設定します。これにより、先行ゼロがなく(素数候補が十分に大きい)、偶数ではない(間違いなく素数ではない)ことが確認されます。

  3. 素数性をテストします。プライムでない場合は、1に戻ります。

または、素数を生成するライブラリ関数を使用します。

于 2009-11-20T10:52:32.060 に答える
22

OpenSSLなどのライブラリ関数を使用します。これを自分で書く必要はありません。

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

上記のリンクは機能しないため、このアーカイブリンクを使用できます。

于 2009-11-20T10:47:28.157 に答える
3

1024はたくさんあります。確率的プライムではうまくいかないのですか?確率的素数ジェネレーターはJDKの一部です

于 2009-11-20T10:50:35.233 に答える
2

コンテキスト/言語/プラットフォームを指定しません。unix/linuxのようなシステムとシェルを使用する場合は、OpenSSLバージョン>=1.0.0を含むソリューションを検討してください。

$ openssl prime -generate -bits 1024
140750877582727333214379261853877378646889234118675380673028200387281415297520423589261211081966230040412916644372766351028035798201654335110081318739796178745233127842988596480299276295476504358587725867882394416543075082108266054273016211760684113070285409887820598314292803190900634009988950624354964653677

同じ結果が得られた場合、宇宙に何か問題があります。

-hex16進法が好きな場合は、オプションを追加してください。

于 2015-08-15T07:53:42.270 に答える
0

メモリを速度と交換するには、メモリを生成してリストに保存し、ランダムに1つ選択します。

編集:当然、すべてを生成することはできないため、達成できる最善の方法は、高いメモリコストでの疑似ランダム性です。また、セキュリティのために必要な場合、これは良くありません。

于 2009-11-20T10:48:05.563 に答える
0

PARI / GPの場合

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

これを「ライブラリモード」で実行したい場合

#include <pari/pari.h>
// ...
randomprime(mkvec2(int2u(1023), int2u(1024)))
于 2015-07-09T18:01:40.360 に答える