D'après ta boucle, 3 est divisible par 3, donc 3 n'est pas premier ... Tu dois tester que m==3 avant la boucle. Je te suggère de mettre quelque chose du genre: int max = sqrt(m + 0.5); // Au cas où, pour les carrés parfaits. for(int i = 3; i <= max; i += 2) {
Le Tout est souvent plus grand que la somme de ses parties.
C'était le sens de ma suggestion. On peut optimiser encore en ne considérant que les nombres de la forme 6n+5 et 6n+7 C'est évidemment valable si n est suffisamment grand. - int premier(int m) { if(m < 2) return 0; if(m == 2) return 1; if(m%2 == 0) return 0; if(m <= 5) return 1; if(m%3 == 0) return 0; int max = sqrt(m + 0.5); for(int f = 5; f <= max; f += 6) { if(m%f == 0 || m%(f+2) == 0) return 0; } return 1; }
Le Tout est souvent plus grand que la somme de ses parties.
Attention que si sqrt(49) vaut 6.999999 au lieu de 7, il croira que 49 est un nombre premier. Je le sais, ça m'est arrivé un jour (et je crois que c'était avec un programme en C).
C'est pour ça que Pierrot le Fou avait écrit :
int max = sqrt(m + 0.5); // Au cas où, pour les carrés parfaits.
@robun: Comme tu le dis, c'est à cause de ce genre d'erreur que je le fais. Cependant, j'ai fait des tests en C et en Python avec des nombres assez grands sans cette précaution, et la racine est bien calculée. Il me semble être allé jusqu'à un milliard. Peut-être que les vieilles versions de sqrt étaient moins bonnes, ou que les processeurs étaient "moins précis" en arithmétique arrondie ?
Le Tout est souvent plus grand que la somme de ses parties.
récupérer un nombre premier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.