Programme sur les nombres premiers

Résolu/Fermé
moi - 21 janv. 2005 à 18:15
 johan - 28 janv. 2009 à 15:16
salut tout le monde,
J'avais déjà écrit pour des renseignements sur les nombres premiers et certain m'avais aidés mais voilà j'ai toujours un problème. Je mets mon code en-dessous et si quelqu'un peut m'aider à corriger j'en serai ravi...

#include <stdio.h>
#include <stdlib.h>

int main()
{
int v[100]; /*vecteur contenant les nombres*/
int j; /*compteur des nombres du vecteur*/
int i; /*position des nombres dans le vecteur*/
int cpt=0; /*compteur des nombres premiers*/


for(i=0; i<100; i++) /*entrée des valeurs de 0 à 100 dans le
{ vecteur + affichage du vecteur*/
v[i]=i;
printf("%4d",v[i]);
}


printf("\n\n\n");


for(i=0; i<100; i++)
{

for(j=2; j<v[i]; j++)
{

if((v[i]%j)!=0) /*si un nombre "v[i]" est divisible par un
{ des nombres "j" qui le précède,*/
cpt++; /*alors il n'est pas premier*/
printf("%4d",v[i]); /*on affiche les nombres premiers*/
break;
}

}

}


printf("\n\nIl y a %d nombre(s) premier(s).",cpt); /*on affiche
le nombre de nombres premiers*/

printf("\n\n\n");
system("pause");
}

Je sais qu'il y a un problème dans ma boucle mais je ne sais pas comment le résoudre (c'est le problème du 1).
Voilà j'attends votre aide et merci d'avance.

4 réponses

blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
21 janv. 2005 à 19:46
Salut, j'ai essayé de modifier le moins possible ton listing, mais
j'ai quand même rajouté une variable.
le problème, c'est que quand un nombre est divisible, pas la peine d'insister. Par contre, quand on a fini la boucle et qu'il ne s'est pas montré divisible (par autre chose que 1 et lui même), cela ne fait qu'un seul nombre premier. Donc son affichage doit être en dehors de la boucle de vérification (qu'un nombre est premier)


#include <stdio.h>
#include <stdlib.h>

int main()
{
int v[100]; /*vecteur contenant les nombres*/
int j; /*compteur des nombres du vecteur*/
int i; /*position des nombres dans le vecteur*/
int cpt=0; /*compteur des nombres premiers*/
bool premier; /* témoin de nombre premier */


for(i=0; i<100; i++)
/*entrée des valeurs de 0 à 100 dans le
vecteur + affichage du vecteur*/
  {
  v[i]=i;
  printf("%4d",v[i]);
  }


printf("\n\n\n");


for(i=0; i<100; i++)
{
/* je sais que c'est bizzare mais il faut bien rentrer dans la boucle*/
premier=true;
 for(j=2; j<v[i] && premier== true; j++)/*tant que premier et que pas tout vu*/
 {
  if((v[i]%j)==0) /*si un nombre "v[i]" est divisible par un
   des nombres "j" qui le précède,*/
    {
     premier=false;
    /*seule la détection d'un nombre non premier fait sortir de la     boucle*/
    }

  }

/**/
if(premier==true)
  {
     cpt++; /*alors il n'est pas premier*/
     printf("%4d",v[i]); /*on affiche les nombres premiers*/
  }
}


printf("\n\nIl y a %d nombre(s) premier(s).",cpt); /*on affiche
le nombre de nombres premiers*/


printf("\n\n\n");
system("pause");
}



cordialement
¤
2
Merci pour le code je crois que j'ai enfin pigé le truc. Le type booléen c'est vraiment pas bête mais je n'y aurai jamais pensé tout seul.
A la prochaine, parce que je me connais, il va y en avoir d'autre!!!
0
Bonjour!

J'ai fait il y a assez longtemps un programme en rapid-q pour trouver les nombres premiers. J'ai maintenant la liste de tous les nombre premiers de 1 à 50000 (mais je peux aller + loin 8-D ). Si ca peut interresser quelqu'un...

Mon site sur la programmation en Rapid-Q : http://www.Rapid-Q.tk
0
johan > PetitFurby
28 janv. 2009 à 15:16
je souhaiterai avoir ta page et savoir comment reconnaitre rapidement quand c'est un nombre premier merci pour ton aide
0
Je suis intéressé par ton programme alors si tu peux me dire ou le trouver j'en serais content. Le language rapid-q m'est inconnu mais si tu peux m'envoyer une page ou deux d'explications se serait bien aussi.

Merci d'avance, salut.
0
Salut!

Pas de problème j'ai retrouvé le code source du programme .

N'étant pas un pro de la prog mes codes sources sont encore compréhensibles.. lol Sinon demande moi de l'aide par mail.

Voici le lien du code source : http://thomas.nico.free.fr/file/nbprem.bas

Pour le compiler, télécharges rapidq sur mon site : www.Rapid-Q.tk

[Ca a été programmé rapidement et c'est encore perfectible au niveau de la vitesse, m'enfin ca commence à ramer aux alentours de 20000 sur un P133 Mhz :p)]

Voici la liste des nb premiers de 1 à 50000 :
http://thomas.nico.free.fr/file/nbprem.txt

Si il y a un problème, tu peux me contacter facilement , plus d'infos sur mon site.

A+
Nico ;-)
0