Language c

Fermé
nuleninfo - 18 sept. 2009 à 18:39
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 18 sept. 2009 à 19:02
Bonjour et salut a tous,
voila je débute en language c et en fait je voulais écrire un programme qui permet de dire si un nombre est premier ou pas.
Je tiens à le dire j'ai déja chercher sur google effectivement ya pleins de méthode dessus mais il y a toujours un truc qui cloche. Voila ce que j'ai esssayé de faire. Ca fonctionne seulement quand c'est un nombre qui n'est pas premier.

#include<stdio.h>
#include<math.h>
int main(){
int i, x, a;
int k=sqrt(x);
int valeur=0;
printf("entrez un nombre : ");
scanf("%d", &x);

if(x<2){printf("le nombre n'est pas premier");}

if(x==2){printf("le nombre est premier");}

if(x>=3){
for(i=2;i<=k;i++){
if(x%i==0){printf("le nombre n'est pas premier");break;}
else{printf("le nombre est premier");};}
;}
;}

Vous pouvez me dire ce qui cloche?

2 réponses

D'après toi, après ces deux lignes:
int i, x, a;
int k=sqrt(x);

Quelle sera la valeur de 'k' ?
Bonne réflexion.
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
18 sept. 2009 à 19:02
Hello,
je vois déjà un petit problème de chronologie : tu appelles sqrt(x) avant d’avoir obtenu la valeur de x.

Ensuite, dans le cas x>3, quand tu fais x%i, tu peux avoir par exemple x = 120 et i = 7 : 120 n’est pas divisible par 7, et 120%7 donne 1. Dans ce cas, ton programme va te dire « le nombre est premier » alors que 120 n’est pas premier… Bon d’accord, il est censé vérifier d’abord avec 1, 2, 3, 4, 5, 6, mais je mets en évidence un petit défaut de ton code.

En réalité, ce n’est que lorsque tu as vérifié tous les nombres avant racine de k que tu peux dire que x est premier. Donc ton printf ne doit pas se trouver dans le else mais plutôt après la boucle for.

Tiens-moi au courant ;)
0