Language c

nuleninfo -  
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   -
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

loupius
 
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   Statut Membre Dernière intervention   185
 
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