begin process at 2012 02 08 13:25:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

 > CALCUL LIST DE NOMBRES PREMIERS

CALCUL LIST DE NOMBRES PREMIERS


 Information sur la source

Note :
1,4 / 10 - par 5 personnes
1,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Math & Algorithmes Classé sous :nombres, premiers, nombres premiers Niveau :Débutant Date de création :08/06/2010 Date de mise à jour :15/06/2010 15:59:33 Vu :2 762

Auteur : White541

Ecrire un message privé
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

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

  • 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);
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);



 Historique

14 juin 2010 17:52:28 :
Mise a jour : nombre/2
14 juin 2010 17:53:36 :
idem xd
15 juin 2010 15:59:33 :
modif

 Sources de la même categorie

Source avec Zip BASE64 ENCRYPT/DECRYPT PYTHON BY MAXOU56800 par Maxou56800
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip Source avec une capture COURBE DE BEZIER par mecrosoft
Source avec Zip Source avec une capture CALCUL D'AIRE D'UN TRIANGLE [INTERFACE GRAPHIQUE] par SeventhSon
Source avec Zip Source avec une capture SUITE DE FIBONACCI [INTERFACE GRAPHIQUE] par SeventhSon

 Sources en rapport avec celle ci

Source avec Zip NOMBRES PREMIERS, LISTES, NOMBRES PREMIERS JUMEAUX, CONJECTU... par Julien39

Commentaires et avis

Commentaire de Julien39 le 09/06/2010 17:52:29 administrateur CS 1/10

Ce code n'est vraiment pas formidable, aucune optimisation, tu teste tous les nombres, les pairs compris et tu t'arrêtes bien trop tard. en effet, si un nombre n'est pas premier alors il admet un diviseur plus petit que sa racine carrée.

En faisant une optimisation vraiment minime, on arrive déjà à diviser par plus de 4 le nombre de test réalisés !!!

Commentaire de PlugnPlay666 le 10/06/2010 19:15:04 3/10

Julien n'a pas tout à fait tort . . . Même si c'est un script écrit à la va vite, tu aurais pu l'optimiser un minimum avant de le poster ici.

Juste un petit truc que j'ai remarqué 8 et 17, tu écris :

i=i+1

tu pourrais le remplacer par i+=1
M'enfin ça c'est juste plus beau à regarder, ça change pas grand chose . . .

Commentaire de aera group le 10/06/2010 19:49:41 1/10

"Une issue de secours à 9 000 mètres d'altitude. L'illusion de la sécurité." - Tyler


Bon, je pense que Julien39 à bien résumé la situation, j'ai beaucoup de mal à concevoir que l'on puisse déposé sur ce site un si petit code et surtout aussi mal optimisé.
De plus, il est souhaitable de ne pas mettre de ";" à la fin des lignes en Python, c'est assez contradictoire avec la volonté d'utiliser un langage de programmation aussi intuitif que Python ...

Voila je pense que 1 est une note largement suffisante. Tache de corriger ton code, et de déposé des programme un peu plus complexe.

Commentaire de PlugnPlay666 le 10/06/2010 21:45:14

Oh ! En lisant le commentaire d'Aera, j'ai vu un truc affreux !!
Une docstring ne se fait pas avec des dièses !! Sinon quand on fait help(fonction) rien ne s'affiche et ta pseudo-docstring ne sert à rien . . .

Pour écrire une docstring tu la met entre trois guillemets.

def nb(nombre):
    """Fonction qui détermine si un nombre est premier ou non."""

def list(x):
    """Fonction qui liste les nombres premiers jusqu'à X."""

Commentaire de sithoueb le 14/06/2010 14:46:16 1/10

J'ai fait un programme (sur ma calculette et j'ai la flemme de le mettre sur PC) pour calculer les nombre premiers.
Et plutot que de vérifier avec TOUT les nombres, je vérifie si il est divisible avec les précédents, inférieur à sa moitié (Un nombre n'est pas divisible par un autre nombre supérieur à sa moitiée) !

Sérieux, ce code est assez nul (sans vouloir te vexer)  ...

Commentaire de Julien39 le 14/06/2010 17:28:28 administrateur CS

Le coup de s'arrêter à la moitié c'est une idée mais pas la meilleure, il faut s'arrêter à la racine du nombre en question pour avoir les meilleurs performances.

Commentaire de sithoueb le 14/06/2010 17:31:59

J'suis qu'en seconde aussi ...

Commentaire de Julien39 le 14/06/2010 17:58:13 administrateur CS

Ha oui, là ca change tout je pense. Tu n'as pas eu de cours sur les nombres premiers et donc, tu ne pouvais pas savoir tout ca.

En fait pour t'expliquer en gros, si un nombre n admet un diviseur p qui n'est différent de 1 et de n alors, n=p*q. Le premier cas c'est p<racine(n) et si p est plus grand que racine(n) alors forcément q lui est plus petit que racine (n) en effet si p et q sont supérieurs à racine(n) alors p*q>racine(n) or p*q = n.
Donc tout nombre non premier admet un diviseur plus petit que ca racine.

Un truc pas mal aussi c'est de tester pour 2 et puis de ne pas tester pour les multiples de 2 en gros, tu teste que pour les nombres qui s'écrivent 2*i+1.



Petite remarque en passant pour quelqu'un qui est en seconde, qui n'a jamais posté une source ni aucun autre commentaire sur ce site ou un autre site code source, je te trouve bien sûr de toi quand tu dis "c'est nul". La critique est aisée...

Commentaire de PlugnPlay666 le 14/06/2010 18:40:24

Bah . . . Personnellement je suis en troisième et j'ai étudié les nombres premiers en tout début d'année, après cette notion n'a peut-être pas été assez approfondie par tes profs, ou alors tu n'as pas écouté en cours =P

@Julien: "Petite remarque en passant pour quelqu'un qui est en seconde"
Je ne pense pas que les capacités d'un programmeur est un quelconque rapport avec son âge, même si quelqu'un de plus âgé a accumulé un certain nombre de connaissance le plus jeune peut toujours rattraper ce manque par un travail et un entrainement suffisant.

Commentaire de Julien39 le 14/06/2010 18:51:44 administrateur CS

ne me fais pas dire ce que je n'ai pas dit.

Je ne mets pas en doute les capacités de personne. Mais je pense que quand on n'a encore poté aucune source, on évite les commentaires destructeurs du genre "c'est nul". C'est juste ce que je voulais dire.

J'espère que tu ne l'a pas mal pris. Surtout en Python qui est assez intuitif, on peut apprendre à coder à tout age, d'ailleurs je ne suis pas spécialiste du tout de ce langage et il est possible que tu en connaisses plus que moi en python.

Commentaire de PlugnPlay666 le 14/06/2010 19:35:21

Oh non ne t'inquiète pas, je ne l'ai pas mal pris, c'est plutôt lui qui peux mal le prendre quoique ta remarque soit justifiée.
(Je ne suis pas comme Xeolin =P)

Commentaire de aera group le 15/06/2010 20:04:00

Je ne suis pas tout à fait d'accord avec la remarque de Julien.
Je pense que lorsqu'une source est mauvaise comme c'est le cas ici, il ne faut pas tourner autour du pot et le dire clairement. Ici je pense que le mot "nul" est bien approprier à la situation, car la source est mauvaise en beaucoup de points qui me semble tout de même essentiels.
Je suis parfois déçus qu'il y ai peu de monde qui dépose des sources sur Python France, mais il faut bien admettre que je préfère ne pas en voire plutôt que ces pseudo code. À quoi ça sert de poster un code de 10 lignes fait au moins 15 fois en beaucoup mieux sur ce site.
Cela dis que pense que même si on descend ce code, cela ne veux pas dire que la personne elle est irrémédiablement nul. C'est à elle de progresser  c'est-à-dire de corriger son code dans un premier temps et nous montrer ensuite un code digne de ce nom dans la prochaine source. Et la il a droit aux commentaires bien gentil de tout le monde.

En résumé, ce code est nul, donc toi tu dois :
- Corriger ton code (= s'arrêter à racine du nombre + enlever ces foutu ";")
- Nous proposer un code plus consistant la fois prochaine

Voila je pense que tous est dit.


Joker - coups de fil à un amis :
     form math import *
     print sqrt(25)

_____
Aéra


"Vous êtes la merde de ce monde prêt à servir à tout ..." - Tyler

Commentaire de xeolin le 16/06/2010 16:39:53 1/10

Tiens on parle de moi..

"À quoi ça sert de poster un code de 10 lignes fait au moins 15 fois en beaucoup mieux sur ce site."

He bien, moi j'en connais au moins une (surtout que c'est moi qui l'est fait), mon code pour faire des clef RSA incorpore l'argorithme de Rabin-Miller qui permet de savoir si un nombre est premier ou pas. En tout cas sur un intel core solo a 1.6 GHz j'arrive en quelque seconde a verifier la primalite, d'un nombre de l'ordre de la dixaine de millier de chiffre.

Mais bon apres il y ceux qui savent utiliser wikipedia et d'autre pas...

En tout cas fait une petite recherche sur les alforithme non-deterministes.

(et il y a aussi ceux qui on un clavier sans accents, vive les claviers US !)

Nate ?:



NB :

fait moi le plaisir de faire ce petit changement !

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;

Commentaire de xeolin le 16/06/2010 16:53:05

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 ?

Commentaire de Julien39 le 21/06/2010 19:11:56 administrateur CS

Aucune réaction de l'auteur, ca ne sert à rien de poster des mauvais codes si on ne cherche pas à les améliorer.

Commentaire de svear le 17/07/2010 19:32:27

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...

Commentaire de xeolin le 18/07/2010 00:49:41

''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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Grands nombres [ par franckysnow91 ] Bonjour à tous,Je développe un algorithme fonctionnant sur la base d'opérations mathématiques basées sur des nombres premiers. Mon problème est que qu newbee python [ par trambux ] hello ts je commence juste python, je sais l'importance de bien coder j'ai donc décidé de ne passer aucun exo mais celui là I NEED HELP !![^^happy17]


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,118 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales