Maison  >  Article  >  développement back-end  >  Comment optimiser l'impression de nombres premiers en Python pour des résultats précis ?

Comment optimiser l'impression de nombres premiers en Python pour des résultats précis ?

DDD
DDDoriginal
2024-10-21 13:34:31725parcourir

How to Optimize Prime Number Printing in Python for Accurate Results?

Impression de séries de nombres premiers en Python

L'identification des nombres premiers est un concept fondamental en mathématiques et en programmation. Un nombre premier est un entier supérieur à 1 qui n’est pas le produit de deux entiers plus petits. Le code Python suivant vise à imprimer une série de nombres premiers de 1 à 100.

Code et problème

Une approche courante pour trouver des nombres premiers consiste à parcourir les nombres de 2 à n. Pour chaque nombre, vérifiez s'il est divisible par un nombre compris entre 2 et lui-même (sauf 1). S'il est divisible, ce n'est pas un nombre premier ; sinon, c'est le cas.

Considérez le code suivant destiné à imprimer des nombres premiers entre 1 et 100 :

<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>

Cependant, ce code rencontre un problème où les nombres impairs sont imprimés au lieu des nombres premiers. Le défaut survient parce que la boucle externe parcourt non seulement les nombres premiers mais également les nombres composés (multiples d’autres nombres). Par conséquent, la condition if num % i != 0 devient vraie pour les nombres composés impairs comme 9, conduisant à l'impression erronée de tous les nombres impairs.

Solution et optimisation

Pour corriger cela, nous devons modifier le code pour vérifier explicitement les nombres premiers. Voici la version révisée :

<code class="python">for num in range(2, 101):  # Start at 2 as 1 is not prime
    prime = True
    for i in range(2, num):
        if num % i == 0:
            prime = False
    if prime:
        print(num)</code>

Dans ce code, nous introduisons une variable booléenne prime, initialement définie sur True. Nous vérifions ensuite chaque nombre entre 2 et num-1 (hors num) en utilisant la boucle interne. Si num est divisible par n'importe quel nombre i, nous définissons prime sur False, indiquant qu'il n'est pas premier. Après la boucle interne, si prime reste vrai, nous imprimons num.

Ce code identifie avec précision les nombres premiers dans la plage spécifiée. Cependant, il peut être encore optimisé en vérifiant uniquement les diviseurs jusqu'à la racine carrée de num. En effet, tout facteur supérieur à la racine carrée aurait un facteur correspondant inférieur à la racine carrée.

Voici la version optimisée :

<code class="python">for num in range(2, 101):
    prime = True
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            prime = False
    if prime:
        print(num)</code>

En utilisant ces ajustements, le code imprime efficacement la série de nombres premiers compris entre 1 et 100.

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!

Déclaration:
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