Langace C, Nombre parfait

Fermé
keurdange Messages postés 720 Date d'inscription lundi 8 novembre 2010 Statut Membre Dernière intervention 13 juillet 2016 - 9 avril 2011 à 19:24
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 9 août 2011 à 14:18
Bonjour,

je suis debutant en langage et j'aimerais faire un programme qui teste si un nombre un parfait (on dit qu'un nombre est parfait s'il est égal à à la somme de ses diviseurs sauf lui même. exemple 6. Preuve: 6=3+2+1 et 6/1=6,6/2=3,6/3=2).
voici mon programmme

#include<stdio.h>
int nbr,n,som,quotient;
main()
{
do
{
printf("Entrez le nombre à tester: ");
scanf("%d", &nbr);
}
while(nbr<0);
som=0;
for(n=1;n=nbr-1;n++)
{
if(nbr%n==0)
{
quotient=nbr/n;
if(quotient==n)
som=som+1;
if(quotient!=n)
som=som+2;
}
}
if(som==nbr)
printf("%d est un nombre parfait", nbr);
else
printf("%d n'est pas un nombre parfait", nbr);
}

mais à l'exécution (je suis sous ubuntu), le curseur revient à la ligne et puis rien ne se passe.
aidez moi.

Merci


3 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié par KX le 20/06/2011 à 08:23
Comme le disait Arya Dröttningu, ton erreur est dans la boucle for, en effet n=nbr-1 n'est pas une condition d'arrêt, c'est une affection, et du coup ta boucle ne s'arrête jamais... Modifies ça en n<=nbr-1 ou n<nbr et ça se terminera.

Remarque : ton calcul est faux, je l'ai testé entre 1 et 10000, il trouve 2 (qui n'est pas parfait) et 6 alors qu'on devrait trouver 6, 28, 496 et 8128...
4