15

BigInteger クラスを使用して Java でランダムな n 桁の整数を生成する方法がわかりません。

4

6 に答える 6

16
private static Random rnd = new Random();

public static String getRandomNumber(int digCount) {
    StringBuilder sb = new StringBuilder(digCount);
    for(int i=0; i < digCount; i++)
        sb.append((char)('0' + rnd.nextInt(10)));
    return sb.toString();
}

そして、あなたはそれを使うことができます:

new BigInteger(getRandomNumber(10000))
于 2010-09-14T14:01:18.077 に答える
5

ドキュメントによると、Java 6 で必要なことを行うコンストラクターがあります: BigInteger(int, java.util.Random)

これには、ランダムに選択された 5000 番目の数字を追加するだけで済みます。つまり、rng コンストラクターを使用して 4999 桁にし、別のランダム プロセスを介して最後の数字を追加します。実際には、大きな値のパフォーマンスをサンプリングしたいだけなので、ビットを生成し、10 進表記に従うのではなく、大きい方の端に 1 ビットを追加することができます。

于 2010-09-14T14:10:06.093 に答える
4

最も簡単な方法は、おそらく char[] 配列に 5000 のランダムな数字を入力し、それを文字列に変換してから、BigInteger(String)コンストラクターを呼び出すことです。

これらの手順のいずれかで問題が発生した場合は、詳細をお知らせください。

または、次のようなこともできます。

Random rng = new Random(); // But use one instance throughout your app
BigInteger current = BigInteger.ZERO;
for (int i = 0; i < 5000; i++) {
    BigInteger nextDigit = BigInteger.valueOf(rng.nextInt(10));
    current = current.multiply(BigInteger.TEN).add(nextDigit);
}

しかし、それはかなり効率が悪いと思います。

を使用して、一度に 9 つの乱数を生成することにより、必要なステップ数を減らすことができますrng.nextInt(1000000000)

于 2010-09-14T13:57:06.750 に答える
2

ここに2つのバージョンがあります。1つはパラメーターとしてランダムを取ります(再利用したい場合):

public static BigInteger getRandomNumber(final int digCount){
    return getRandomNumber(digCount, new Random());
}

public static BigInteger getRandomNumber(final int digCount, Random rnd){
    final char[] ch = new char[digCount];
    for(int i = 0; i < digCount; i++){
        ch[i] =
            (char) ('0' + (i == 0 ? rnd.nextInt(9) + 1 : rnd.nextInt(10)));
    }
    return new BigInteger(new String(ch));
}

結果のBigIntegerは、常に指定された長さになります。

于 2010-09-14T15:21:10.483 に答える
1

n が 1 から 12 の場合、次の方法が役立ちます

private String getRandom(int length) {
    if (length < 1 && length > 12) {
        throw new IllegalArgumentException("Random number generator length should be between 1 to 12");
    }
    long nextLong = Math.abs(random.nextLong());
    return String.valueOf(nextLong).substring(0, length);
}

もう 1 つ注意すべき点は、十分にテストされたコードではないということです。

于 2014-04-10T12:35:38.507 に答える
0

5000 桁の文字列を取得して、BigInteger に変換します。

于 2010-09-14T14:01:39.480 に答える