김현이

[Java] Trouver les nombres premiers de manière paresseuse avec Stream

Création: 2024-07-23

Création: 2024-07-23 19:39

On vérifie généralement si n est un nombre premier en le divisant par les nombres de 2 à n - 1 et en vérifiant s'il est divisible.

Essayons d'améliorer encore plus l'efficacité de cette méthode en appliquant quelques optimisations et en utilisant Stream pour appliquer l'évaluation paresseuse.


Méthode naïve

Voici une méthode naïve pour vérifier si n est un nombre premier.

Améliorations

  • Lorsqu'on écrit n = a x b, on peut supposer sans perte de généralité que a > b.
    En d'autres termes, il suffit de vérifier i jusqu'à sqrt(n). L'opération sqrt() étant coûteuse, on peut la remplacer par la condition i * i <= n.
  • Les nombres premiers supérieurs à 5 sont de la forme 6k ± 1. Par conséquent, on peut réduire le nombre de vérifications en incrémentant i de 6.

Méthode améliorée


Application de l'évaluation paresseuse avec Stream

Dans Java, Stream ne réalise pas immédiatement les opérations définies, contrairement à List.

Il reste en attente, avec la définition de la façon dont chaque élément doit être calculé, et n'exécute l'opération que lorsque l'élément en question est nécessaire.

En utilisant cette fonctionnalité, nous pouvons créer un Stream qui trouve les nombres premiers comme suit.

Résultat de l'exécution

Code complet

Résultat de l'exécution

[Java] Trouver les nombres premiers de manière paresseuse avec Stream




Commentaires0