1

Project Euler Problem 60を解いたところですが、私のプログラムはまだ少し遅すぎます。ほとんどの時間がファイルからの読み取りに費やされていることがわかりました...

Linuxデバイスから常に読み取るBigInteger.isProbablePrime用途のようです。SecureRandom私の質問は次のとおりです。

  • 本当に使用する必要がありますSecureRandomか?
  • 慣れます/dev/randomか?/dev/urandom
  • OSからそれらを読み取ることは、適切な乱数を生成するための最良の方法ですか?

私の知る限り、JavaはOSから数バイトを取得していましたが、これはSHA1ベースのPRNGのシードとして使用されていました。

4

2 に答える 2

1

OSからそれらを読み取ることは、適切な乱数を生成するための最良の方法ですか?

私は知りませんがisProbablePrimeSecureRandomランダム関数に非常に優れた特性を持つ対応するOS関数を介して乱数を取得しようとします。
Linux では、これは 2 つの仮想デバイスによって発生し、ファイルから読み取る/dev/random/dev/urandom、ビットは予測できないほどランダムになり、システムで発生したイベントに基づいて生成されます。

/dev/random または /dev/urandom は使用されますか?

実際、これは構成可能であり、これを見ることができます。JRE でファイルを
開きます。そこに構成エントリがあります。私のインストールでは指定されています。 security.propertieslib\security/dev/urandom

との違いは、新しいランダム ビットが利用できない場合に/dev/randomブロックすることです/dev/urandom/dev/random

于 2012-08-21T23:01:14.857 に答える
0

BigInteger と SecureRandom はどちらも、Euler 60 では過剰 (かつ遅い) です。この種の問題では、SecureRandom の暗号化プロパティは必要ありません。通常のランダムは完全にうまく機能します。

回答の最大数は、BigInteger を使用する必要がある範囲を大きく下回っています。私のソリューションでは、Eratosthenes を使用して、素数を限界まで事前計算しました。それは私に十分に速いプライムテストを与えました.

于 2012-08-22T13:27:11.833 に答える