Identifier efficacement les nombres premiers en Python
Trouver une série de nombres premiers dans une plage donnée est une tâche de programmation courante. Pour y parvenir en Python, nous utilisons une séquence logique de boucles et d'instructions conditionnelles pour déterminer la primalité. Cependant, il est essentiel de noter que certaines tentatives initiales peuvent donner des résultats incorrects.
Correction du code d'identification par nombre premier
Une inspection du code d'origine révèle une faille critique : il imprime incorrectement les nombres impairs, pas les nombres premiers. Cette erreur provient d'une condition manquante qui identifie efficacement les nombres non premiers. Voici une description du problème :
<code class="python">for num in range(1, 101): for i in range(2, num): if num % i == 0: break else: print(num) break</code>
Pour corriger cela, nous devons vérifier explicitement si le nombre est divisible par un nombre compris entre 2 et lui-même. Si aucun diviseur n’est trouvé, c’est premier. Voici la version améliorée :
<code class="python">for num in range(2, 101): prime = True for i in range(2, num): if (num % i == 0): prime = False if prime: print(num)</code>
Optimisation du code pour l'efficacité
Pour améliorer les performances, il est recommandé de vérifier uniquement les diviseurs jusqu'à la racine carrée de la valeur donnée nombre. Si aucun diviseur n’est trouvé dans cette plage, elle peut être considérée comme première. Cette optimisation réduit considérablement le nombre d'itérations requises :
<code class="python">import math for num in range(2, 101): if all(num % i != 0 for i in range(2, int(math.sqrt(num)) + 1)): print(num)</code>
Affinements supplémentaires
Le code peut être rendu encore plus efficace en sélectionnant uniquement des nombres impairs puisque les nombres premiers sont plus grands. plus de 2 sont toujours impairs. Le code révisé :
<code class="python">import math print(2) for num in range(3, 101, 2): if all(num % i != 0 for i in range(3, int(math.sqrt(num)) + 1, 2)): print(num)</code>
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!