Vérifier si un nombre est premier en Java

Vérifier si un nombre est premier en Java

1. introduction

Tout d'abord, revenons sur la même théorie de base.

En termes simples, un nombre est premier s’il n’est divisible que par un et par le nombre lui-même. Les nombres non premiers sont appelés nombres composites. Et le numéro un n'est ni premier ni composite.

Dans cet article, nous allons examiner différentes manières de vérifier la primalité d'un nombre en Java.

2. Une implémentation personnalisée

Avec cette approche, nous pouvons vérifier si un nombre compris entre 2 et (racine carrée du nombre) peut diviser avec précision le nombre.

La logique suivante renverratrue si le nombre est premier:

public boolean isPrime(int number) {
    return number > 2
      && IntStream.rangeClosed(2, (int) Math.sqrt(number))
      .noneMatch(n -> (number % n == 0));
}

3. Utilisation deBigInteger

La classeBigInteger est généralement utilisée pour stocker des entiers de grande taille, c'est-à-dire ceux supérieurs à 64 bits. Il fournit quelques API utiles pour travailler avec les valeursint etlong.

L'une de ces API est leisProbablePrime. Cette API renvoiefalse si le nombre est définitivement un composite et renvoietrue s'il y a une certaine probabilité qu'il soit premier. C'est utile pour les entiers de grande taille car le calcul complet de ces calculs peut être assez intensif.

A quick side-note - l'APIisProbablePrime utilise ce que l'on appelle les tests de primalité «Miller - Rabin et Lucas - Lehmer» pour vérifier si le nombre est probablement premier. Dans les cas où le nombre est inférieur à 100 bits, seul le test «Miller - Rabin» est utilisé, sinon, les deux tests sont utilisés pour vérifier la primalité d'un nombre.

Le test «Miller-Rabin» itère un nombre fixe de fois pour déterminer la primalité du nombre et ce compte d'itérations est déterminé par une vérification simple qui implique la longueur en bits du nombre et la valeur de certitude transmise à l'API:

public boolean isPrime(int number) {
    BigInteger bigInt = BigInteger.valueOf(number);
    return bigInt.isProbablePrime(100);
}

4. Utilisation d'Apache Commons Math

L'API Math Apache Commons fournit une méthode nomméeorg.apache.commons.math3.primes.Primes, que nous utiliserons pour vérifier la primalité d'un nombre.

Tout d'abord, nous devons importer la bibliothèque Apache Commons Math en ajoutant la dépendance suivante dans nospom.xml:


    org.apache.commons
    commons-math3
    3.6.1

La dernière version de commons-math3 peut être trouvéehere.

Nous pourrions faire la vérification en appelant simplement la méthode:

Primes.isPrime(number);

5. Conclusion

Dans ce bref résumé, nous avons vu trois façons de vérifier la primalité du nombre.

Le code pour cela se trouve dans le packagecom.example.primecheckerover on Github.