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
Libérer: 2025-01-13 22:01:46
original
946 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal