Maison  >  Article  >  Java  >  Comment générer des valeurs BigInteger aléatoires dans une plage personnalisée en Java ?

Comment générer des valeurs BigInteger aléatoires dans une plage personnalisée en Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 07:43:29310parcourir

How to Generate Random BigInteger Values Within a Custom Range in Java?

Comment générer des valeurs BigInteger aléatoires dans une plage personnalisée en Java

Pour générer des valeurs BigInteger aléatoires dans une plage spécifiée, en particulier lorsque la valeur supérieure limit (n) n'est pas une puissance de 2, le constructeur BigInteger(int numBits, Random rnd) peut être employé.

Pour y parvenir, une boucle est nécessaire :

<code class="java">BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);</code>

Ceci Cette approche fournit une distribution uniforme dans la plage spécifiée et nécessite généralement moins de deux itérations.

Pour plus d'efficacité, le nombre d'itérations peut être limité :

<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>

Bien que cette version garantisse une exécution rapide en presque dans tous les cas, cela introduit une opération mod() plus coûteuse en termes de calcul. Par conséquent, le choix entre les deux approches dépend de l'instance RNG spécifique utilisée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn