IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Lister les nombres premiers


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Lister les nombres premiers
    Bonjour bonjour ,

    Voila je viens à vous pour une question d’algorithmique , je doit afficher tout les nombres premiers compris entre 3 et 50 et en afficher la somme. Le petit soucis c'est que j'arrive pas a obtenir se que je souhaite , si quelqu'un peu me débloquer voici le début de mon algo ( Je ne doit utilisé aucune solution pour facilité comme % , sqrt etc... ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Début
    
    // Entrée
                int Nombre = 0;
                int NombreBoucle = 0;
                int Division = 0;
                int RetourEtatNormal = 0;
                int Divisible = 0;
                int Total = 0;
    
    //Traitement
    
    
                // On regarde tout les nombres jusque 50
                Pour (Nombre=3 ; Nombre<=50 ; Nombre++) Faire
                |
                |      
                |    //Autre boucle pour test chiffres avant le nombres actuelle
                |    Pour ( NombreBoucle=3 ; NombreBoucle <= Nombre ; NombreBoucle++ ) Faire
                |    |
                |    |   Division = Nombre / NombreBoucle;
                |    |   RetourEtatNormal = Division * Nombre;
                |    |   
                |    |
                |    |   //Test Pour savoir si le nombre multiplier est égal au nombre de base
                |    |   Si ( RetourEtatNormal == Nombre )
                |    |   |
                |    |   |     Divisible = Divisible + 1;
                |    |   FinSi
                |    |
                |    FinPour
                |
                |
                |     //Test Si le nombre de division possible est inférieur a 3
                |     SI ( Divisible < 3 ) Alors
                |     |
                |     | Total = Total + Nombre;
                |     | Afficher (Nombre)
                |     |
                |     FinSi
                |    Divisible = 0 ;
                FinPour
    
                Afficher Total ;
    
    Fin
    Si quelqu'un peu corrigé mon erreur et me l’expliquer je serai ravis ^^

    En vous remerciant

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 122
    Points : 9 545
    Points
    9 545
    Par défaut
    Tu dis que ton algo ne marche pas ... ce serait plus cool de dire pourquoi il ne marche pas.
    Ici, apparemment, il considère que trop de nombres sont premiers.

    Dans ta boucle, il faut remplacer : pour NombreBoucle = 3 a nombre
    par pour NombreBoucle = 1 a nombre

    Sinon, si tu as le droit d'utiliser des tableaux ou des listes, le prof attend surement que tu utilises le crible d'Eratosthene.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Enfin Trouvé
    Merci d'etre passez sur mon post j'ai enfin trouvez la solution a mon problème j'ai presque voulus pleurer en voyant ma connerie -_- , Je la poste si il y a des personnes que sa intéresse .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Début
        // Entrée
            int Nombre = 0;
            int NombreBoucle = 0;
            int Division = 0;
            int RetourEtatNormal = 0;
            int Divisible = 0;
            int Total = 0;
            
        //Traitement
            
            Pour (Nombre=2 ; Nombre <= 50 ; Nombre++) Faire                                    //Bouclage sur les 50 premiers Nombres    
    
                Pour ( NombreBoucle =1 ; NombreBoucle < Nombre +1 ; NombreBoucle++ ) Faire                     //Bouclage & Test pour tout les Nombres inférieur au Nombre Actuel                                                                                
                    Division = Nombre / NombreBoucle;                                        //Division du nombre actuelle 
                    RetourEtatNormal = Division * NombreBoucle;                                //Re-multiplication par le nombre actuelle de la boucle 
    
                    Si ( RetourEtatNormal == Nombre) Alors                                    //Test Si les nombres sont égaux                                                                                     
                        Divisible = Divisible + 1;                                            //Si Oui le nombre est divisible
                    FinSi
                    
                FinPour
                
                
                Si (Divisible < 3)Alors                                                        //Si le nombre de divisible est inférieur a 3 alors c'est un nombre premier
                        Afficher (Nombre)                                                    //On affiche alors le Nombre
                    Total = Total + Nombre ;                                                 //On calcule à la suite les additions de tout les nombres premier trouver
                FinSi
                
                
                Divisible = 0 ;                                                                //On remet nombre de division possible a Zero
                
            FinPour
            
        //Sortie
            Afficher(Total);                                                                //On affiche le résultat Final
    Fin

    Voila sa m'affiche tout les nombres premier jusque 50 et le total de ceci ... Prise de tête pour rien ^^

  4. #4
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 155
    Points
    1 155
    Billets dans le blog
    2
    Par défaut Optimisation de recherche de nombre premier.
    Dans l’exécution et la recherche des nombre premier, tu n'as pas besoin de faire une recherche des diviseurs supérieurs à la racine du nombre sur le quel tu travail. De plus tu peux mémoriser les premier nombre premier pour les reprendre dans ton algorithmes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nb premier = [1, 2 ]
     
    Pour i = 3 à 50
     
        Pour j = maximum de nb premier à arrondi inférieure de racine de i
     
            Si le reste de i/j = 0 alors i n'est pas premier et arrêté la boucle et marqueur à 1
     
        if marqueur à 1 rien faire sinon ajouter j a nb premier.
    Cordialement

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 122
    Points : 9 545
    Points
    9 545
    Par défaut
    florian avait précisé qu'il n'avait pas droit à la fonction sqrt ...

  6. #6
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Dans ce cas, vu le faible intervalle, le plus simple aurait été d'utiliser une crible.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    Oui. Ou un crible. Puis un crible d'Erathostène. Comme dit ci-dessus.

    Mais manifestement le PO s'en moque.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par picodev Voir le message
    Dans ce cas, vu le faible intervalle, le plus simple aurait été d'utiliser une crible.
    Ca me semblait aussi la solution la plus simple.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    boolean[] prime = new boolean[51];
    Arrays.fill(prime, true); // assume all integers are prime
     
    int sum=0;
    for(int i=2;i<=50;i++) {
        if (prime[i]) {
            sum+=i;  // add current prime to the sum
            for(int k=2*i;k<=50;k+=i) prime[k]=false; // multiples of this prime are not prime
        }
    }
    return sum;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les nombres premiers
    Par chouuc dans le forum Mathématiques
    Réponses: 36
    Dernier message: 17/01/2009, 13h14
  2. Programme détectant les nombres premiers
    Par frankthechamp dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/12/2008, 22h41
  3. script qui donne les nombres premiers
    Par islah dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2008, 21h06
  4. Réponses: 2
    Dernier message: 07/03/2007, 16h30
  5. Réponses: 24
    Dernier message: 27/09/2005, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo