Tester si un nomber entier positif est un nombre premier ou non

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 226 fois - Téléchargée 29 fois

Contenu du snippet

ATTENTION : Ce code a été écrit sous Unix avec comme éditeur de texte Emacs.
Il répond au Standard C99 c'est pourquoi il faut le spécifier au compilateur car la plupart fonctionnent toujorus en ANSI par défault.
Exemple pour compiler (avec GCC sous Linux) : gcc --std=CC99 --pedantic -W -Wall nomdufichier.c
Le résultat sera par défault dans le fichier ./a.out, si vous voulez spécifiez le fichier de destination, rajouter
-o nomdufichier.
Les options W & Wall servent à afficher tous les warnings !

Ceci est mon premier programme et n'est pas du tout compliqué à comprendre...
Je scanne ce que l'utilisateur rentre et si les conditions (>=0) sont respectés alors je regarde s'il est premier.
Un moyen de le savoir et de faire une boucle qui par de i=2 jusqu'à la moitie du nombre et de s'arreter lorsque lenombre%i==0.
On analyse le i en sortie de la boucle et on imprime le résultat.

Source / Exemple :


#include <stdio.h>

int main() {
  char choix=0; //on laisse le choix à l'utilisateur de quitter ou pas
  int nbr,pgd; //nbr = nombre à analyser & pgd = plus grand diviseur
  
  while (choix!='q') //tant que l'on ne veut pas quitter...
    {
      printf("Entrez un nombre entier plus grand ou égale à 0 : ");
      scanf("%d",&nbr); //si l'utilisateur rentre un CHAR, nbr est <0 donc OK
      scanf("%c",&choix); //si l'utilisateur rentre q, on sort du programme
      
      if ((nbr<0) && (choix!='q')) printf("Le nombre doit être supérieur ou égale à 0 !\n");
      if (choix=='q') printf("Aurevoir\n");
      else  if ((nbr>=0) && (choix!='q'))  //on est dans les bonnes conditions de calcul de pgd
	{
	  //Calcul de Pgd
	  for (pgd=2;(pgd<=(nbr/2) && (nbr%pgd!=0));pgd++);

	  //Affichage selon le résultat
	  if (pgd>nbr/2)
	    {
	      if (nbr==0) printf("0 n'est pas premier, 1 le divise\n");
	      else  printf("%d est premier\n",nbr);    
	    }
	  else
	    {
	      printf("%d n'est pas premier, %d le divise\n",nbr,pgd);
	    }  //Fin affiche
	  printf("Entrez (q) pour quitter\n");
	}
    }
  return 0;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
24 février 2004

marxman
je suis désolé mais le programme fonctionne, tu n'as qu'à le compiler et tu verras.

pgd peut très bien etre > nbr / 2 vu le for...
tant qu'aucun pgd ne divise le nbr, le pgd augmente et s'arrete losqur pgd>nbr/2 vu la condition ds le for qui est (pgd<=nbr/2)

Si c'est le cas, alors il n'y a aucun divisueur et le nbr est premier.
Messages postés
1
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 février 2004

attention grosse erreur ton code est faux!
a ce niveau
"//Affichage selon le résultat
if (pgd>nbr/2)
"
comment veux tu que pgd soit supérieur a la moitié du nombre si avant tu conditionne le for en mettant
" for (pgd=2;(pgd<=(nbr/2) && (nbr%pgd!=0));pgd++);
"
??? ;-)
au quel cas ton programme ne risque pas de fonctionner
a mon avis tu voulait surement dire

"if(pgd==nbr/2)"
ce qui serait plus susceptible de fonctionner ;-)
(je dis ca pour ceux qui sont intéressé par ce code car je pense que si tu n'avait pas fait cette faute ton programme n'aurait jamais fonctionné et tu ne l'aurais pas proposé ici )
Messages postés
4
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
24 février 2004

bah il se compile peut etre avec TC
Essaie et dis moi !!!
C'est vrai que j'utilise pas bcp de choses du STD99 a part les commenaitres "//"
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
9
c'est pas trop mal pour un premier programme... mais tu dis d'éviter de le compiler avec TC, pourquoi? ton code utilise les fonctions standard du C, il est donc compilable avec n'importe quel compilateur !!!
Messages postés
4
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
24 février 2004

Voilà, désolé ^^
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.