生成随机 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;
}
});