2011-11-23 11 views
7

どのようにして非常に大きな乱数をJavaで生成できますか?私は10000桁のようなものを話していますか?私はBigIntegerを使用しなければならないことは知っていますが、どうやってこれを行うことができますか?このようなことをする最も効果的な方法は何ですか?小さな例を挙げてください。ありがとうございました。非常に大きな乱数を生成するJava

答えて

17

もう1つの方法は、Random.orgに行き、バイナリランダムファイルの1つをダウンロードすることです。ファイルは大気騒音から生成されるので、非常にランダムです。チェスエンジンのZobristキーに使用しました。

代わりに、あなたは何をしたいあなたを与えるだろう

BigInteger b = new BigInteger(256, new Random()); 

を行くことができます。この例では、256ビットで構成されるBigIntegerです。

+1

+1。ドキュメンテーションには4つのコンストラクタがありましたが、私はそれを見ませんでした:D。 – Vlad

+0

私たちの最高のことが起こります! –

7

BigInteger(byte[])を組み合わせてください。

import java.util.*; 
import java.math.*; 
class Test{ 
    public static void main(String[]_){ 

     int n = 16; 

     Random r = new Random(); 
     byte[] b = new byte[n]; 
     r.nextBytes(b); 
     BigInteger i = new BigInteger(b); 

     System.out.println(i); 
    } 
} 
+1

+1:おそらくmod()を使用して特定の桁数を取得します。 –

+0

これはどのように動作するのですか?ありがとうございました –

+0

バイトの配列を割り当てると、nextBytesはランダムな値で埋められ、BigIntegerはそのバイト列で定義されたバイナリ番号として初期化されます。しかし、私はJacoの解決策がより簡潔だと思います。 – Vlad