Java의 사용자 정의 범위 내에서 임의의 BigInteger 값을 생성하는 방법
지정된 범위 내에서 임의의 BigInteger 값을 생성하려면, 특히 상위 Limit(n)이 2의 거듭제곱이 아닌 경우 생성자 BigInteger(int numBits, Random rnd)를 사용할 수 있습니다.
이를 달성하려면 루프가 필요합니다.
<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>
이 버전은 거의 빠른 완료를 보장합니다. 모든 경우에 계산 비용이 더 많이 드는 mod() 작업이 도입됩니다. 따라서 두 접근 방식 중 선택은 사용되는 특정 RNG 인스턴스에 따라 달라집니다.
위 내용은 Java의 사용자 정의 범위 내에서 임의의 BigInteger 값을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!