Écrire un programme en c qui détermine si un nombre est parfait où pas
Écrire un programme en c qui détermine si un nombre est parfait où pas
C'est marrantLes 2 définitions font peur
![]()
Un nombre égal à la somme de ses diviseurs propres est parfait. Un diviseur propre est un diviseur autre que le nombre lui-même.L'exemple qui va bien :Lorsque la somme d’une suite de nombres doubles les uns des autres est un nombre premier, il suffit de multiplier ce nombre par le dernier terme de cette somme pour obtenir un nombre parfait.
- 1+2=3 qui est premier donc 2x3=6 est parfait.
- 1+2+4=7 qui est premier donc 4x7=28 est parfait.
- 1+2+4+8=15 n’est pas premier.
- 1+2+4+8+16=31 est premier donc 16x31=496 est parfait.
Ensuite le bon Euclide a donné une formule :
Cela sert la récursion, une suite mathématiques2^(p-1)*(2^p - 1) est parfait si p et (2^p - 1) sont premiers.
Et là tu tombes sur :
Donc cela se résume à 6 tests. C'est un programme de fouLes nombres parfaits sont rares, il n’en existe que trois inférieurs à 1000 qui sont 6, 28 et 496.
Ensuite vient 8128, puis 33 550 336,
8 589 869 056,
137 438 691 328,
2 305 843 008 139 952 128 (découvert par Leonhard Euler),
2 658 455 991 569 831 744 654 692 615 953 842 176, …![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if ((nb == 6) || (nb == 28) || (nb == 496) || (nb == 8128) || (nb == 33550336) || (nb == 8589869056)) { printf("this is a perfect number\n"); } else { printf("this is NOT a perfect number\n"); }
Source : Les nombres parfaits - sur le site "maths et tiques"
J'ai réussi à écrire l algorithme puis j'ai effectué la trace avec algobox ça fonctionne , le véritable problème c est lorsque je traduis en c ça donne pas le résultat attendu , je sais pas alors si j'ai mal initialiser ou pas où mal traduis
Si je souhaite que l'utilisateur entre un nombre
Avant de déterminer s'il est parfait où pas j'ai ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Int main() Int c , nb,i Printf(" entrez un nombre\n"); Scanf("%d",$nb); For(i==1; i<nb; i++) If(nb%i==0) C=c+1; If( c==nb) Printf(" il est parfait"); Else Printf ("il n'est pas parfait"); Return0;
Bonjour,
Vraiment ? Les formules de politesse, c'est bien quand on demande de l'aide : https://club.developpez.com/regles/#LIV-AÉcrire un programme en c qui détermine si un nombre est parfait où pas
Accessoirement, on n'est pas là pour faire votre travail : https://club.developpez.com/regles/#LIV-N
De plus, on n'est pas devin, sans code ni message d'erreur ni description du problème, on ne pourra pas vous aider : https://club.developpez.com/regles/#LIII-CJ'ai réussi à écrire l algorithme puis j'ai effectué la trace avec algobox ça fonctionne , le véritable problème c est lorsque je traduis en c ça donne pas le résultat attendu , je sais pas alors si j'ai mal initialiser ou pas où mal traduis
Ceci n'est pas du C...Int main()
Int c , nb,i
Printf(" entrez un nombre\n");
Scanf("%d",$nb);
For(i==1; i<nb; i++)
If(nb%i==0)
C=c+1;
If( c==nb)
Printf(" il est parfait");
Else
Printf ("il n'est pas parfait");
Return0;
Pensez également à ceci pour poster du code ça permet de le rendre plus lisible : https://club.developpez.com/regles/#LIII-E
On attend votre code avec les explications de ce qui ne va pas maintenant![]()
Bonjour
Ton algorithme me semble un peu bizarre. Tu regardes si le nombre de diviseurs de "nb" vaut "nb"ce qui, mis à part pour "1" et "2", n'est pas possible (par exemple 48 n'a pas 48 diviseurs !!!) mais bon, ceci n'est pas une démonstration au sens mathématique du terme alors qui sait, peut-être qu'effectivement il existe un nombre "X" qui a "X" diviseurs
Et euh... accessoirement tester la division par 1 me semble un peu inutile (je crois qu'il existe une légende qui dit que tous les nombres sont divisibles par 1).
Sinon mes remarques en rouge dans ce canada-dry (ça ressemble à du C, son nom sonne comme un nom de prog C mais ce n'est pas du C).
Et maintenant un conseil: découpe les taches. D'un côté le main() qui se chargera de faire saisir le nombre et d'afficher s'il est ou n'est pas parfait ; et de l'autre une fonction qui détermine si le nombre est ou n'est pas parfait. Ainsi tu pourras tester le main tout seul, puis la fonction toute seule, et quand les deux seront ok, tu pourras alors intégrer la fonction dans le main.
Et aussi peut-être ouvrir un tutoriel de C parce que vu ton niveau...![]()
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Merci , j'arrivais pas à formater le code source raison pour laquelle je l'ai écrit dans les commentaires
Je tiens compte de toutes vos précisions
Partager