programme nombre premier en c

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, Je suis votre tutoriel de c et il se trouve que je ne comprend pas trop la réponse pour le programme qui détermine si le nombre est premier ou pas. Avant de regarder j'avais essayé de faire un code qui se base sur la propriété si un nombre x est divisible par y alors le résultat de l’opération x % y est nul. j'avais donc mis les conditions suivantes

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int main(int argc, char **argv)
{   int x=0;
    printf("entrer un nombre premier \n");
    scanf("%d",&x);
    while( ((x%1)== 0) && ((x%x)== 0) && (x%(2)!=0) && ((x%(3)!=0) ))
    {
        printf("le nombre %d est premier \n",x);
        break; 

    }
    return 0;
}

Voila je ne voit pas trop quoi rajouter pour l'améliorer

merci d'avance

Édité par artragis

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

while( ((x%1)== 0) && ((x%x)== 0) && (x%(2)!=0) && ((x%(3)!=0) ))

signifie textuellement "tant que x est divisible par 1, par lui même et pas par 2 ni 3"

Donc si tu entres "25" par exemple, il te dira "le nombre 25 est premier" en effet 25 est divisible par 1, par lui même mais pas par 3.

puis sortira de la boucle.

On a donc un comportement assez étrange : tu sors de la boucle tout de suite.

Le test de X divisible par 1 et par lui même ne sert à rien : tous les nombres sont divisibles par 1 et par eux mêmes.

Ensuite, le principe naïf est de tester un par un tous les diviseurs inférieur au nombre (ou à la racine carré du nombre) et de dire "il n'est pas premier" si tu trouves un diviseur.

PS : j'ai corrigé ton message pour mettre la coloration syntaxique : il faut que tu mettes un retour à la ligne entre les trois antiapostrophe et le code. En effet les caractères qui suivent les trois antiapostrophes permettent de dire de quel langage on parle (dans ton cas le C)

Édité par artragis

+1 -0

L'algorithme que tu présentes est super bizarre, et faux. Pourquoi tu boucles sur une condition invariante pour ressortir juste après ? Pourquoi tu testes si x est premier avec lui-même ? C'est effectivement avec l'opérateur reste que tu dois procéder, mais c'est la structure de base de ton algo qui est fausse.

Pour t'aiguiller, on dit que $x$ entier naturel non nul est premier si et seulement si c'est 1 ou si pour tout entier entre 1 et $x$ exclu cet entier ne divise pas $x$.

Maintenant que je t'ai donné une piste, essaie d'écrire le pseudocode correspondant à cet algorithme. Ne le code pas avant d'avoir tout mis au clair sous forme de pseudocode, ça aide à comprendre ce qu'on fait.

Me suis fait griller mais je poste quand même au cas où ça t'aide.

Édité par anonyme

+1 -0
Staff

C'est pour ça qu'on est là. COmme le dit très bien le tutoriel de C++ que je suis en train de relire, la programmation c'est de la logique et de la patience. Quand tu as des problèmes de logique, demander à quelqu'un c'est le meilleur moyen de les comprendre.

Autre technique, c'est la technique de la peluche : raconte ton algo à une peluche, tu te rendras compte des problèmes qu'il contient.

Autre technique : essaie plusieurs valeurs éloignée les unes des autres.

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Salut,

Je suis votre tutoriel de c et il se trouve que je ne comprend pas trop la réponse pour le programme qui détermine si le nombre est premier ou pas.

electronsource75

La réponse donnée dans le cours (chapitre sur les boucles) utilise un algorithme naïf et peu efficace, mais qui a le mérite d'être simple et de présenter la logique d'une boucle : le corps est exécuté tant que l'indice (qui commence à deux, puisque tous les nombres sont multiples de un) est inférieur au nombre entré. Dans le cas où un de ceux-ci est un diviseur du nombre fourni par l'utilisateur (autrement dit, si le reste de la division entière est non nul), alors c'est qu'il n'est pas premier. Sinon, c'est qu'il est premier.

+0 -0

@Grimur: Bien pour ça que j'ai précisé que l'algo était naïf. De plus, si cet algo ne peut démontrer qu'il n'est pas premier, cela signifie que le nombre l'est. Encore une fois, j'insiste sur le fait que c'est naïf et une approche très simplifiée du problème.

Un tutoriel Rust (en français) est disponible à cette adresse : http://blog.guillaume-gomez.fr/Rust

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte