生成隨機 BigIntegers

BigInteger 類有一個專用於生成隨機 BigIntegers 的建構函式,給定一個 java.util.Random 例項和一個 int,它指定了 BigInteger 有多少位。它的用法很簡單 - 當你像這樣呼叫建構函式 BigInteger(int, Random)

BigInteger randomBigInt = new BigInteger(bitCount, sourceOfRandomness);

然後你會得到一個 BigInteger,其值介於 0(含)和 2 bitCount (不包括)之間。

這也意味著 new BigInteger(2147483647, sourceOfRandomness) 可以在給定足夠時間的情況下返回所有正數。

sourceOfRandomness 將取決於你。例如,在大多數情況下,new Random() 足夠好:

new BigInteger(32, new Random());

如果你願意放棄高質量隨機數的速度,可以使用 : new SecureRandom ()

import java.security.SecureRandom;

// somewhere in the code...
new BigInteger(32, new SecureRandom());

你甚至可以使用匿名類實時實現演算法! 請注意,推出自己的 RNG 演算法導致低質量的隨機性,因此,除非你希望得到的 BigInteger(s)是可預測的,否則請務必使用經證明是不錯的演算法。

new BigInteger(32, new Random() {
    int seed = 0;

    @Override
    protected int next(int bits) {
        seed = ((22695477 * seed) + 1) & 2147483647; // Values shamelessly stolen from Wikipedia
        return seed;
    }
});