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 ?

Pourquoi mon programme ne parvient-il pas à trouver des nombres premiers dans une variable longue et comment puis-je y remédier ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-13 22:01:46910parcourir

Why is my program failing to find prime numbers within a long variable, and how can I fix it?

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!

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