生成隨機 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;
}
});