首页  >  文章  >  Java  >  如何在Java中生成特定范围内的任意大的随机BigIntegers?

如何在Java中生成特定范围内的任意大的随机BigIntegers?

Linda Hamilton
Linda Hamilton原创
2024-10-25 01:02:30407浏览

How to Generate Arbitrarily Large Random BigIntegers in a Specific Range in Java?

用Java生成随机大整数

问题:

如何生成任意大的随机数BigInteger 值在 0 到 n(不包括 n)范围内,其中 n 不是 2 的幂?

答案:

利用 BigInteger 的构造函数,该构造函数需要一点时间count 和随机生成器的实例,您可以创建这样的值:

public BigInteger(int numBits, Random rnd)

但是,要获得所需范围内的值,需要使用循环:

BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);

平均而言,此循环的迭代次数少于两次,确保均匀分布。

编辑:

对于随机生成器性能密集型的情况,您可以实现以下方法:

int nlen = upperLimit.bitLength();
BigInteger nm1 = upperLimit.subtract(BigInteger.ONE);
BigInteger randomNumber, temp;
do {
    temp = new BigInteger(nlen + 100, randomSource);
    randomNumber = temp.mod(upperLimit);
} while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);

虽然此方法显着降低了多次循环迭代的可能性(小于 2^100 中的一次),但它利用了计算量大的 mod() 操作。因此,如果提供的 Random 实例的性能开销较低,则这种方法的效率可能会低于前一种方法。

以上是如何在Java中生成特定范围内的任意大的随机BigIntegers?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn