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 :

Nombre parfait


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Par défaut Nombre parfait
    Bonjour!
    Quelqu'un pourrait m'aider a résoudre cette exercice s'il vous plait?

    Un nombre parfait est un entier positif supérieur à 1, égal à la somme de ses
    diviseurs ; on ne compte pas comme diviseur le nombre lui-même.
    Exemple :
    6 est un nombre parfait puisque : 6 = 3 + 2 + 1.
    Écrire un algorithme qui qui nous dit si un entier N saisi par l’utilisateur est parfait ou non.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    si j ai tout compris de vérifier si un nombre que tu entre au clavier est un nombre parfait
    l’algorithme est assez simple


    il te suffit de faire une boucle de 2 a Ton chiffre divisé par 2
    dans cette boucle tu vérifie si le diviseur est un nombre entier
    si oui tu incrémente la somme du diviseur

    a la fin de la boucle tu vérifie que le nombre entre en paramètre est égale à la somme + 1
    si oui c'est un nombre parfait sinon ce ne l'est pas

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Il faut faire une décomposition en facteurs premiers.
    On sait qu'il suffit de tester jusqu'à la racine du nombre pour les trouver. (Et non pas la moitié ...)

    Si on se place dans le cas général, ton problème n'a pas de solution puisqu'on ne sait pas factoriser un nombre quelconque.

    Une méthode peut être de garder sous le coude une liste des nombres premiers jusqu'à 1 million en espérant que l'utilisateur n'aille pas au-delà de mille millards.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    pas besoin d'aller au delà de la moitie du nombre puisque ce ne seras forcement plus un nombre parfait

    le nombre parfait ne peut se diviser que par soi même et ne voulant que des diviseur entier la valeur de ton diviseur ne peut absolument pas être supérieur à sa moitié

    quelque soit le chiffre si tu divise ton nombre par un nombre supérieur a sa moitié ton diviseur ne pourra être compris qu'entre 1.000000001 et 1.999999999


    prenons 28
    28 div 2 = 14
    donc je boucle de 2 a 14
    28 mod 2 = 0
    Somme = 2
    28 mod 3 <> 0
    28 mod 4 = 0
    Somme = 2+4 = 6
    28 mod 5 <> 0
    28 mod 6 <> 0
    28 mod 7 <> 0
    Somme = 6+7 = 13;
    28 mod 9 <> 0
    ...
    28 mod 14 = 0
    Somme = 13 +14 = 27

    somme = 27+1 = 28 ... nombre parfait

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Pardon d'insister mais la racine est inférieure à la moitié. Tu veux explorer jusqu'à 14 alors qu'explorer jusqu'à 5 est suffisant.

    28=2*14=2*2*7=2²*7

    Les diviseurs sont donc 1 2 4 7 14 28.

  6. #6
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Bonjour.

    Il est totalement inutile de chercher les facteurs premiers de N pour savoir si N est parfait.

    Lorsqu'on cherche à savoir si un entier N est premier, une méthode consiste à tester tous les entiers k compris entre 2 et racine(N) et examiner si k divise N.
    Si aucun de ces entiers k ne divise N, alors on peut conclure que N est premier.

    Ce n'est pas du tout ce qu"il faut faire ici !

    Pour savoir si N est parfait, il faut chercher tous les diviseurs de N autres que N, faire la somme de ces diviseurs et comparer le résultat avec N.
    D'où l'algorithme suivant, écrit en pseudo-langage :

    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
     
    n:ENTIER
    k:ENTIER
    reste:ENTIER
    somme:ENTIER
     
    ENTRER n
    somme <- 0
    POUR k DE 1 A (n DIV 2) FAIRE
         reste <- (n MODULO k)
         SI reste = 0
            ALORS somme <- somme + k
         FINSI
    FINFAIRE
    SI somme = n
       ALORS AFFICHER(" n est parfait ")
       SINON AFFICHER(" n n'est pas parfait ")
    FINSI
    Je suppose que l'on dispose de la division entière : DIV retourne le quotient et MODULO le reste.

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

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. Les nombres parfaits
    Par Trap D dans le forum Haskell
    Réponses: 8
    Dernier message: 14/01/2013, 23h46
  3. Calculer les quatre premiers nombres parfaits
    Par nzokou eric dans le forum Pascal
    Réponses: 2
    Dernier message: 28/11/2008, 20h51
  4. pb nombres parfaits et amis
    Par snake264 dans le forum Mathématiques
    Réponses: 18
    Dernier message: 25/01/2008, 16h05
  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