首頁 > Java > java教程 > 主體

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

Linda Hamilton
發布: 2024-10-25 01:02:30
原創
485 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板