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 :

Algorithme nombre parfait


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par défaut Algorithme nombre parfait
    J'ai trouvé un exo sur les algorithmes qui dit

    dans le théorie des nombres parfaits, EULER a démontré que l'expression

    (2^(n-1))(2^n-1)

    donne toujours un nombre parfait lorsque (2^n-1) = un nombre premier

    CONSTRUIRE l'algorithme qui nous donne les 5 premiers nombres parfaits
    j'ai essayé de le résoudre et je veux maintenant que quelqu'un me corrige les fautes

    __________________________________________
    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
    ALGORITHME 5_nb_parfait                                                              VAR   n,K,A:entier
    nb_diviseur , n_nb parfait: entier   
    
    
    DEBUT
    n_nb parf=0              {nombre des nombres parfaits}
       tant que n_nb parf < 5 faire
         DEBUT TQ         A= (2**n -1) 
             nb_diviseur =0
               pour K=1 à (2**n-1) faire
                  DPOUR
                     si (2**n-1) MOD K = 0 alors   nb_diviseur = nb_diviseur +1
                  FPOUR
              SI nb_diviseur<=2   alors    
                 DSI
                   ecrire (2**(n-1))(2**n-1)
                   n_nb parf= n_nb parfait +1
                 FSI
        FIN TQ
    FIN.

  2. #2
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Bonsoir,

    Je t'ai mis des commentaires en rouge.

    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
    ALGORITHME 5_nb_parfait
    VAR n,K,A:entier
    nb_diviseur , n_nb parfait: entier
     
    DEBUT
      n_nb parf=0 {nombre des nombres parfaits}
      tant que n_nb parf < 5 faire
      DEBUT TQ
        A= (2**n -1)  //C'est quoi la valeur de n ?
        nb_diviseur =0
        
        pour K=1 à (2**n-1) faire //utilise A ...
        DPOUR
          si (2**n-1) MOD K = 0 alors //idem, A
          nb_diviseur = nb_diviseur +1
        FPOUR
        
        SI nb_diviseur<=2   alors //Petit problème, dépend de la valeur initiale de n...
        DSI
          ecrire (2**(n-1))(2**n-1)
          n_nb parf= n_nb parfait +1 //parf ou parfait ?
        FSI
        //je pense qu'il manque quelque chose...
       FIN TQ
    FIN.
    Globalement c'est pas mal, mais plusieurs problèmes

    1) C'est le "petit problème". Tout dépend a quoi "n" est égal au début (0,1,2,... ?)

    2) Si on prend le code tel quel, n ne varie jamais. Donc tu aura a chaque fois les même nombres parfaits. Il manque une incrémentation et une valeur initiale.

    3) Pas vraiment un problème, mais plutôt une suggestion, pour de l'optimisation. Il existe un autre théorème qui dit que :
    Si un nombre (A ici) n'est divisible par aucun nombre premier (K) inferieur ou égal à sa racine carré, alors le nombre est premier
    Ce qui fait que, en théorie, tu n'a pas besoin de tester TOUS les nombres de 1 à (2^n-1). Tu peux les tester de 1 à jusqu'a MAX, tant que MAX <= RACINE(2^n-1).
    Bon ici l'intéret est négligeable, pour les 5 premiers nombres premiers, mais ça aurait été très important pour les 100 premiers par exemple...

    4) Le point 3 pourrait te donner une idée d'amélioration si tu relit bien le théorème que j'ai donné.


    Dernier détail : évite de mettre des espaces dans tes noms de variables

    Voilà, je t'ai donné des pistes d'amélioration, à toi de corriger ce qui ne va pas.

    Bon courage

Discussions similaires

  1. Nombres parfaits : petite erreur dans l'algorithme
    Par katrena99 dans le forum Pascal
    Réponses: 6
    Dernier message: 27/01/2014, 22h36
  2. Calculer les quatre premiers nombres parfaits
    Par nzokou eric dans le forum Pascal
    Réponses: 2
    Dernier message: 28/11/2008, 20h51
  3. pb nombres parfaits et amis
    Par snake264 dans le forum Mathématiques
    Réponses: 18
    Dernier message: 25/01/2008, 16h05
  4. Algorithme nombre de bits d'un nombre décimal
    Par spy_k dans le forum Scheme
    Réponses: 7
    Dernier message: 25/10/2007, 13h53
  5. nombres parfaits...
    Par giminik dans le forum Mathématiques
    Réponses: 7
    Dernier message: 15/10/2002, 18h36

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