Calcul list de nombres premiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 709 fois - Téléchargée 16 fois

Contenu du snippet

Voila, j'etait dans un petit jeux, et la question etait "Determinez si les nombres suivants sont des nombres premiers ?". ^^ Il y en avait 10, donc je me suis dit, ca ira plus vite de faire un petit prog.
Voila donc mon code, qui contient deux fonctions (une qui determine si le nombre est un nombre premier, la seconde qui calcul la list de nombres premiers jusque x).
Utile pour les debutants.

Source / Exemple :


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;
		i=i+1;
	return nb;

def list(x):
## Fonction qui list les nombres premiers jusque X.
	i=1;
	while(i<x):
		if(nb(i)):
			print i;
		i=i+1;

##Corps du programme.
print "### Calcul de Nombres Premiers ###";
x=input("Jusque la valeur : ");
list(x);

A voir également

Ajouter un commentaire

Commentaires

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;
Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
''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
Messages postés
3
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
17 juillet 2010

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...
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
301
Aucune réaction de l'auteur, ca ne sert à rien de poster des mauvais codes si on ne cherche pas à les améliorer.
Messages postés
336
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
8 novembre 2011
1
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 ?
Afficher les 18 commentaires

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.