首頁  >  文章  >  Java  >  如何在Java中產生特定範圍內的任意大的隨機BigIntegers?

如何在Java中產生特定範圍內的任意大的隨機BigIntegers?

Linda Hamilton
Linda Hamilton原創
2024-10-25 01:02:30486瀏覽

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