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