>  기사  >  Java  >  Java의 특정 범위에서 임의로 큰 임의 BigInteger를 생성하는 방법은 무엇입니까?

Java의 특정 범위에서 임의로 큰 임의 BigInteger를 생성하는 방법은 무엇입니까?

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 사이의 BigInteger 값(n 제외), 여기서 n은 2의 거듭제곱이 아닌가요?

답변:

약간 시간이 걸리는 BigInteger 생성자 활용 count 및 Random 생성기의 인스턴스를 사용하면 다음과 같은 값을 생성할 수 있습니다.

public BigInteger(int numBits, Random rnd)

그러나 원하는 범위 내의 값을 얻으려면 루프를 사용해야 합니다.

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

평균적으로 이 루프는 두 번 미만의 반복으로 작동하여 균일한 분포를 보장합니다.

편집:

Random 생성기가 성능 집약적인 상황에서는 다음을 수행할 수 있습니다. 다음 접근 방식을 구현하십시오.

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에서 1회 미만) 계산 비용이 많이 드는 mod() 작업을 활용합니다. 따라서 제공된 Random 인스턴스의 성능 오버헤드가 낮은 경우 이 접근 방식은 이전 접근 방식보다 효율성이 떨어질 수 있습니다.

위 내용은 Java의 특정 범위에서 임의로 큰 임의 BigInteger를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.