在Java 中產生隨機BigInteger 值
在Java 中,處理大數時產生指定範圍內的隨機整數可能具有挑戰性。使用nextDouble() 等傳統方法產生隨機數時會出現問題,因為產生的值可能不會均勻分佈超出253.
利用BigInteger 建構子
為了解決這個問題,BigInteger 類別提供了一個建構函數,可以建立在指定位元範圍內均勻分佈的隨機BigInteger 值。
建構BigInteger 建構子:
<code class="java">public BigInteger(int numBits, Random rnd)</code>
此建構子採用兩個參數:
產生一個範圍內的隨機值0 到n(含)的非2 冪範圍,可以使用循環:
此循環迭代,直到獲得有效的隨機值。它確保產生的值在指定範圍內均勻分佈。<code class="java">BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);</code>最佳化迭代次數
為了減少循環迭代次數,可以應用更精細的解.
此方法包括對迭代次數的限制,以防止過多的循環執行。它平衡了速度和準確性,減少了大量迭代的可能性。<code class="java">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);</code>
以上是如何在Java中產生特定範圍內均勻分佈的隨機BigInteger值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!