確かに1024ビット長の乱数をすばやく生成するにはどうすればよいですか?
6 に答える
1024個のランダムビットを生成します。意図した目的に対して十分に強力なランダムソースを使用してください。
最上位ビットと最下位ビットを1に設定します。これにより、先行ゼロがなく(素数候補が十分に大きい)、偶数ではない(間違いなく素数ではない)ことが確認されます。
素数性をテストします。プライムでない場合は、1に戻ります。
または、素数を生成するライブラリ関数を使用します。
OpenSSLなどのライブラリ関数を使用します。これを自分で書く必要はありません。
例:http ://ardoino.com/7-maths-openssl-primes-random/
上記のリンクは機能しないため、このアーカイブリンクを使用できます。
1024はたくさんあります。確率的プライムではうまくいかないのですか?確率的素数ジェネレーターはJDKの一部です
コンテキスト/言語/プラットフォームを指定しません。unix/linuxのようなシステムとシェルを使用する場合は、OpenSSLバージョン>=1.0.0を含むソリューションを検討してください。
$ openssl prime -generate -bits 1024
140750877582727333214379261853877378646889234118675380673028200387281415297520423589261211081966230040412916644372766351028035798201654335110081318739796178745233127842988596480299276295476504358587725867882394416543075082108266054273016211760684113070285409887820598314292803190900634009988950624354964653677
同じ結果が得られた場合、宇宙に何か問題があります。
-hex
16進法が好きな場合は、オプションを追加してください。
メモリを速度と交換するには、メモリを生成してリストに保存し、ランダムに1つ選択します。
編集:当然、すべてを生成することはできないため、達成できる最善の方法は、高いメモリコストでの疑似ランダム性です。また、セキュリティのために必要な場合、これは良くありません。
PARI / GPの場合:
randomprime([2^1023,2^1024])
これを「ライブラリモード」で実行したい場合
#include <pari/pari.h>
// ...
randomprime(mkvec2(int2u(1023), int2u(1024)))