Nombres amis

Résolu
Darksnakes
Messages postés
19
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
14 mars 2007
- 21 oct. 2006 à 10:10
Pole4
Messages postés
20
Date d'inscription
mardi 11 octobre 2005
Statut
Membre
Dernière intervention
13 mars 2007
- 22 oct. 2006 à 10:15
Bonjour tout le monde,

Voila je débute en C, et pour un tp j'ai besoin de faire un programme qui m'affiche la liste des nombres amis inférieur ou égale à N telle que sommediviseur(a)=b et sommediviseur(b)=a.
J'ai fais mon programme mais il ne m'affiche aucune résultats alors que je sais que 284 et 220 sont amis, voici mon programme, il est certainement très lourds, mais cela ne fais que deux semaines que j'ai débuter et que je ne fais que du C, donc je voudrais juste savoir ce qui cloche dans le programme merci :

#include <stdio.h>


int sommediviseur(int n)
{
    int diviseur,sommed;
    sommed=0;
    for(diviseur=1;diviseur<=n/2;diviseur=diviseur+1)
      {
       if(n%diviseur==0)
         {
          sommed=sommed+1;
          }
       }
     return sommed;
}   


int main()
{   /* Affiche la liste des nombre amis 2 à 2 plus petit ou égale à A */
    /*vérifiant (somme diviseur(nb1))= nb2 et vice -versa */
    int nb1,nb2,A;
    printf("Donner un entier positif\n");
    scanf("%d",&A);
    for(nb1=A;nb1>=2;nb1=nb1-1)
      {
       for(nb2=nb1-1;nb2>=1;nb2=nb2-1)
         {
          if((sommediviseur(nb1)==nb2) && (sommediviseur(nb2)==nb1))
            {
             printf("les nombres %d et %d sont amis",nb1,nb2);
             }
          }
       }
    system("PAUSE");


Merci d'avance

Yann

9 réponses

mad_love_disease
Messages postés
64
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
1 juillet 2010
3
21 oct. 2006 à 11:14
Ton programme est bon, seulement tu ne calcules pas la bonne chose.

284 et 220 sont amis car:

les diviseurs de 284 sont: 1, 2, 4, 71 et 142 (somme=220)
les diviseurs de 220 sont 1, 2, 4,5, 10, 11, 20, 22, 44, 55, 110 (somme=284)

Regarde ce que te retourne ta fonction sommediviseur(in n) et tu comprendras pourquoi ca ne marche pas:

sommediviseur(284) va te renvoyer 5 au lieu de 220
sommediviseur(220) va te renvoyer 11 au de 284

Tu vois le truc??? ;)

 Mad_Love_Disease
3