C:nombre ayant nombre impair de diviseurs

Résolu/Fermé
kara - Modifié par kara le 17/09/2011 à 06:36
 kara - 17 sept. 2011 à 06:58
Bonjour,
il y'a un exercice dont l'ennoncé dit: Trouver tous les nombres entre 1 et 100 ayant un nombre impair de diviseurs, par exemple, 10 a quatre diviseurs:1,2,5,10 et 10,et donc ne convient pas.
voici ce que j'ai fait
#include<stdio.h>
#include<stdlib.h>
main()
{
int i=1,s=0,j;
for(i=1;i<=100;i++)
{ for(j=1;j<=i;j++)
{
if(i%j==0)
{
s=s+1;
}
}
if(s%2!=0)
printf("%d\n",i);
}
system("pause");
}

es ce que ce j'ai fait est juste??


3 réponses

#include<stdio.h>
#include<stdlib.h>
main()
{
int i=1,s,j;

for(i=1;i<=100;i++)
s=0;
{ for(j=1;j<=i;j++)

{
if(i%j==0)
{
s=s+1;
}
}
if(s%2!=0)
printf("%d\n",i);
}
system("pause");
}
comme ça??TT^TT
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 sept. 2011 à 06:43
Le s=0 doit être à l'intérieur de l'accolade, sinon ce que tu fais c'est mettre s=0, 100 fois !
Et tu ne rentres dans la boucle j qu'une seule fois avec i=100, ce qui est embêtant ^^
0
oh c'est vrai!!j'ai pas fait attention a l'accolade!!merci!!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 sept. 2011 à 06:25
Il faudrait que tu réinitialises ton nombre de diviseurs avant chaque nouveau calcul.
Sinon il existe des méthodes pour raccourcir le temps d'exécution du programme (en s'arrêtant à j<=sqrt(i)) mais le principe est là.
Remarque : les nombres trouvés ont une propriété intéressante ;-)
-1