4

ユーザーに乱数、特にランダムな Big Integer の桁数を選択させることは可能ですか? たとえば、ユーザーが 15 桁の長さにしたい場合、乱数ジェネレーターは 15 桁の長さの Big Integer のみを生成します。

4

4 に答える 4

5

BigInteger2 進数の桁数を指定する場所のコンストラクターを使用できます: BigInteger(int numBits, Random rnd)。ユーザーが必要とする 3 桁の 10 進数ごとに、およそ 10 桁の 2 進数が必要です。たとえば、30 桁の乱数が必要な場合は、BigInt100 桁の 2 進数を使用します。

を使用して不要な桁を切り捨て、remainder(10^30)次のように、最初の桁がゼロではないことを確認してループで実行し、正しい桁数を確保できます。

Random rnd = new Random(123);
BigInteger tenPow30 = new BigInteger("10").pow(30);
BigInteger min = new BigInteger("10").pow(29);
BigInteger r;
do {
        r = new BigInteger(100, rnd).remainder(tenPow30);
} while (r.compareTo(min) < 0);
System.out.println(r);

デモへのリンク。

于 2012-09-15T18:30:00.703 に答える
4

数字の個々の桁をいつでもランダムに生成できます。このようにして、15 桁の数字の場合、15 桁をランダムに生成してから数字を形成できます。

別の方法:

問題を変更して、ランダムな 5 桁の数字を生成してみましょう。

Min = 10000
Max = 99999

0と の間に乱数を生成し、Max - Min0追加89999Minます。

Random = Min + Math.random() * (Max - Min)
于 2012-09-15T18:29:08.253 に答える
0

手順は次のとおりです。

  1. n 個の数を生成する
  2. を使用してそれらを組み合わせるStringBuilder
  3. を使用して番号を作成しますBigInteger(String)

ここにいくつかのコードがあります:

public static BigInteger randomBigInt(int digits, Random rand) {
    StringBuilder sb = new StringBuilder(digits);

    // First digit can't be 0
    sb.append(rand.nextInt(9) + 1);

    int limit = digits - 1;
    for (int i = 0; i < limit; i++)
        sb.append(rand.nextInt(10));

    return new BigInteger(sb.toString());
}

これにより、各桁が個別に生成され、それらが(バッファー オーバーフローの問題を引き起こす可能性のある や何かとStringBuilderは対照的に) に追加され、その結果を使用して が作成されます。また、最初の桁が 0 になることはありません。intStringBigInteger

于 2012-09-15T18:52:58.223 に答える
-1

ここの RandomUtil クラスのような Random Generator を使用すると、いくつかの値の間などで乱数を作成できます。

たとえば、このコードを使用すると、min=100000000000000 max=999999999999999 の範囲で 15 桁になります。

BigInteger number = RandomUtil.getRandomBigInteger(new BigInteger("100000000000000"), new BigInteger("999999999999999"), false);
于 2015-07-29T15:20:58.007 に答える