Maison >développement back-end >C++ >Pourquoi mon programme de détection de nombres premiers échoue-t-il et comment puis-je y remédier ?

Pourquoi mon programme de détection de nombres premiers échoue-t-il et comment puis-je y remédier ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 21:47:47286parcourir

Why Does My Prime Number Detection Program Fail, and How Can I Fix It?

Débogage d'un détecteur de nombres premiers défectueux

Un programme conçu pour identifier les nombres premiers dans une plage définie par une variable longue ne parvient à produire aucun résultat. L'analyse du code révèle deux failles critiques :

  • Boucle sans fin : La boucle interne de la fonction prime_num() contient une condition défectueuse (i), provoquant une boucle infinie.
  • Logique des nombres premiers défectueuse : La vérification des nombres premiers est incorrecte. Un nombre premier n'est divisible que par 1 et par lui-même. La condition if (i != j && i % j == 0) classe incorrectement les nombres avec des diviseurs supplémentaires comme premiers.

Un algorithme amélioré de recherche de nombres premiers

Une solution plus efficace utilise une méthode de « tamisage par division d'essai » :

<code class="language-csharp">Enumerable.Range(0, Math.Floor(2.52*Math.Sqrt(num)/Math.Log(num))).Aggregate(
    Enumerable.Range(2, num-1).ToList(), 
    (result, index) => { 
        var bp = result[index]; var sqr = bp * bp;
        result.RemoveAll(i => i >= sqr && i % bp == 0); 
        return result; 
    }
);</code>

Cet algorithme amélioré utilise une approximation pour minimiser le nombre de candidats principaux testés, ce qui entraîne des gains de performances significatifs.

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