Maison >développement back-end >C++ >Pourquoi mon programme ne parvient-il pas à trouver des nombres premiers dans une variable longue et comment puis-je y remédier ?
Dépannage de l'identification des nombres premiers dans les variables longues
Un utilisateur a signalé des problèmes d'obtention du résultat lorsqu'il tentait d'identifier des nombres premiers dans une variable longue. Le programme original contenait un défaut empêchant des résultats corrects.
Analyse du problème
L'erreur principale provenait d'une initialisation incorrecte de la variable de boucle. L'état de la boucle externe (i <= num
) était inefficace et provoquait probablement l'exécution du programme indéfiniment ou produisait des résultats incorrects.
Code amélioré
Vous trouverez ci-dessous un programme révisé qui résout ces problèmes et trouve efficacement les nombres premiers dans une plage donnée :
<code class="language-csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PrimeNumberFinder { class Program { static void FindPrimes(long num) { bool isPrime; for (long i = 2; i <= num; i++) { isPrime = true; for (long j = 2; j * j <= i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) { Console.WriteLine(i); } } } static void Main(string[] args) { Console.WriteLine("Enter a number:"); long inputNum; if (long.TryParse(Console.ReadLine(), out inputNum)) { FindPrimes(inputNum); } else { Console.WriteLine("Invalid input. Please enter a valid long integer."); } } } }</code>
Améliorations des performances
Ce code amélioré offre de meilleures performances, approchant la complexité temporelle O(n log log n), ce qui le rend adapté à de plus grandes plages de nombres. La condition de boucle interne (j * j <= i
) est une optimisation clé.
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!