Maison  >  Article  >  développement back-end  >  Comment puis-je générer efficacement des nombres premiers en Python ?

Comment puis-je générer efficacement des nombres premiers en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-13 04:07:49575parcourir

How can I generate prime numbers in Python efficiently?

Générateur de nombres premiers simple en Python avec logique améliorée

Le code donné vise à générer des nombres premiers mais rencontre des problèmes. Voici une élaboration des problèmes et un code révisé avec des améliorations :

Problèmes et solutions :

  • condition incorrecte pour l'impression des amorces : En remplaçant if count % x != 0 par if isprime, nous imprimons les nombres premiers uniquement.
  • gestion incorrecte de la boucle : L'utilisation de break au lieu de continue nous permet de terminer la boucle lorsqu'un facteur non premier est rencontré.
  • plage de test : L'extension de la plage à int(math.sqrt(count) 1) garantit des tests approfondis.
  • optimisé Tamis d'Eratosthène : Pour une génération plus efficace, le code intègre l'algorithme Sieve of Eratosthenes (extrait de code séparé fourni pour référence).

Voici le script Python révisé :

import math

def main():
    count = 3

    while True:
        isprime = True

        for x in range(2, int(math.sqrt(count) + 1)):
            if count % x == 0:
                isprime = False
                break

        if isprime:
            print(count)

        count += 1

Tamis optimisé de Ératosthène :

def gen_primes():
    D = {}
    q = 2

    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]

        q += 1

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