Maison > Java > javaDidacticiel > 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
Libérer: 2024-10-25 07:43:29
original
391 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal