Java Language Générer des BigIntegers aléatoires


Exemple

La classe BigInteger possède un constructeur dédié à la génération aléatoire de BigIntegers , à partir d'une instance de java.util.Random et d'un int qui spécifie le nombre de bits du BigInteger . Son utilisation est assez simple - lorsque vous appelez le constructeur BigInteger(int, Random) comme ceci:

BigInteger randomBigInt = new BigInteger(bitCount, sourceOfRandomness);

alors vous vous retrouverez avec un BigInteger dont la valeur est comprise entre 0 (inclus) et 2 bitCount (exclusif).

Cela signifie également que le new BigInteger(2147483647, sourceOfRandomness) peut renvoyer tous les BigInteger positifs BigInteger suffisamment de temps.


Quelle sera la sourceOfRandomness à vous de sourceOfRandomness ? Par exemple, un new Random() est suffisant dans la plupart des cas:

new BigInteger(32, new Random());

Si vous êtes prêt à abandonner la vitesse pour obtenir des nombres aléatoires de meilleure qualité, vous pouvez utiliser un new SecureRandom () place:

import java.security.SecureRandom;

// somewhere in the code...
new BigInteger(32, new SecureRandom());

Vous pouvez même implémenter un algorithme à la volée avec une classe anonyme! Notez que le déploiement de votre propre algorithme RNG vous amènera à un caractère aléatoire de qualité médiocre . Veillez donc à toujours utiliser un algorithme qui s'avère être décent, à moins que vous ne souhaitiez que le ou les BigInteger soient prévisibles.

new BigInteger(32, new Random() {
    int seed = 0;

    @Override
    protected int next(int bits) {
        seed = ((22695477 * seed) + 1) & 2147483647; // Values shamelessly stolen from Wikipedia
        return seed;
    }
});