CALCUL LIST DE NOMBRES PREMIERS

cs_Julien39 6433 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 2 juin 2016 Dernière intervention - 9 juin 2010 à 17:52 - Dernière réponse :  nj@y@@
- 12 janv. 2018 à 15:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/51872-calcul-list-de-nombres-premiers

Afficher la suite 
xeolin 353 Messages postés samedi 26 novembre 2005Date d'inscription 8 novembre 2011 Dernière intervention - 16 juin 2010 à 16:53
vive l'indentation qui marche pas !

et on reessaye :

def nb(nombre):
## Fonction qui determine si un nombre est premier ou non.
nb=True;
i=2;
while(i<(nombre-1) and i<(nombre/2)):
if(nombre%i==0):
nb=False;
break
i=i+1;
return nb;

Sinon Mr PlugAndPlay

Les attaques personnelles et gratuites non-merci...

Et pourquoi n'a t'on aucun commentaire de l'auteur ?
cs_Julien39 6433 Messages postés mardi 8 mars 2005Date d'inscriptionModérateurStatut 2 juin 2016 Dernière intervention - 21 juin 2010 à 19:11
Aucune réaction de l'auteur, ca ne sert à rien de poster des mauvais codes si on ne cherche pas à les améliorer.
svear 4 Messages postés dimanche 10 octobre 2004Date d'inscription 17 juillet 2010 Dernière intervention - 17 juil. 2010 à 19:32
Bonsoir

Ca fait bien longtemps que je n'étais pas revenu ici. Mais bon, vieux motard quoi...

Donc mes commentaires: déjà, appeler un flag booléen "nb" n'est pas interdit... mais autant l'appeler "flag". Enfin c'est histoire d'avoir des noms de variables en concordance avec leur rôle quoi. Dans la même optique, appeler une fonction qui vérifie si un nombre est premier "nb" n'est pas des plus fins.
De plus, tant qu'à introduire des instructions break qui feront hurler les puristes de la programmation structurée, autant y aller alors à fond
def isPremier(nombre):
## Fonction qui determine si un nombre est premier ou non.
i=2
while(i<(nombre-1) and i<(nombre/2)):
if(nombre%i==0): return False
i=i+1
# while
return True
# isPremier()

Accessoirement, je ne vois pas trop l'utilité des point-virgules à chaque instruction. Un souvenir issu du C sans-doute ;)

Sinon ben quoi dire de plus ? White541 vient de découvrir Python. Il a aussi découvert un algo pour calculer les nombres premiers ben il le poste quoi. Un peu naïf mais pas méchant. Et certainement pas "nul" comme l'a dit cet illustre inconnu.
Peut-être un peu précipité car s'il avait réfléchi un peu plus il aurait, j'espère, trouvé tout seul qu'on peut s'arrêter dès que le résultat de la division devient plus petit que le diviseur...

Voilà. Sinon j'ai été impressionné par l'algo de Rabin-Miller implémenté par Xeolin. Mais à préciser que cet algo ne donne que la probabilité qu'un nombre soit premier ; il ne dit pas s'il est réellement premier. Ce point peut parfois être important...
xeolin 353 Messages postés samedi 26 novembre 2005Date d'inscription 8 novembre 2011 Dernière intervention - 18 juil. 2010 à 00:49
''Mais à préciser que cet algo ne donne que la probabilité qu'un nombre soit premier ; il ne dit pas s'il est réellement premier.''

L'erreur est d'une probabilité de moins de 2^-80. Donc pratiquement nulle. J'irai même dire qu'il y a plus de chance (pour de grand nombre) qu'avec son algorithme un erreur survienne au niveau du CPU/RAM, que mon algo se trompe (on parle de l'ordre de 2^500 et plus)...

La raison que son code est nul, c'est a cause du comportement de celui qui l'a poster : il l'a lâché ici et puis rien, aucune réaction de sa part a nos conseils... Et sinon, tu es peut être impressionné par cet algo mais je travaille sur le "Atkin–Morain elliptic curve primality test"(ECPP), plus efficace :)

Xeolin
si nombre == 1 la fonction nb(nombre) retourne true. Or 1 n'est pas un nombre premier

j'ai ajouté deux lignes de codes pour gérer ce cas

def nb(nombre):

if(nombre == 1):
return false

nb=True;
i=2;
while(i<(nombre-1) and i<(nombre/2)):
if(nombre%i==0):
nb=False;
i=i+1;
return nb;
Commenter la réponse de cs_Julien39

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.