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 중국어 웹사이트의 기타 관련 기사를 참조하세요!