Python...nombre premier
Discutez d'informatique ici !
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 20:42
-
par Rockleader » 12 Juin 2012, 16:31
Bonjour, je cherchais à me faire un programme qui aurait pour but de m'afficher tout les nombres premiers compris entre 1 et 150. Manière d'avoir un crible d'ératostène fait maison quoi...
Bref voilà le code...lorsque j'essaie de le lancer, le .2 de ma version 3.2 de python se surligne en rouge...du coup je me demande s'il y a un problème dans mon code ou bien si c'est parce que j'ai utilisé des termes n'apparaissant pas dans cette version de python...bref je vois pas pourquoi le programme bloque, à la main il passe donc ça doit venir du code...Merci pour votre aide.
- Code: Tout sélectionner
>>> def PGCD(a,b):
return b,abs(a-b)
>>> a=1
>>> b=1
>>> a=int(a)
>>> while a<150:
if PGCD(a,b)!=1:
a=a+1
else:
print(a)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Joker62
- Membre Transcendant
- Messages: 5028
- Enregistré le: 24 Déc 2006, 21:29
-
par Joker62 » 12 Juin 2012, 20:40
Hello !
Moi je ne comprends pas ta fonction PGCD...
Il doit pas y avoir un truc du genre
Si a % b == 0 alors return a Sinon return PGCD(a,a%b) ?
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 20:42
-
par Rockleader » 12 Juin 2012, 20:57
Joker62 a écrit:Hello !
Moi je ne comprends pas ta fonction PGCD...
Il doit pas y avoir un truc du genre
Si a % b == 0 alors return a Sinon return PGCD(a,a%b) ?
Euh, non j'ai déjà utilisé cette fonction là dans un programme qui se contentait de calculer un pgcd, et la fonction marchait bien...je l'ai juste recopier...l'erreur ne vient pas de là...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 14:00
-
par fatal_error » 12 Juin 2012, 21:16
def PGCD(a,b):
return b,abs(a-b)
peux-tu expliquer la syntaxe, je comprends pas?
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 20:42
-
par Rockleader » 12 Juin 2012, 23:09
fatal_error a écrit:peux-tu expliquer la syntaxe, je comprends pas?
Ben ça fait un moment que j'ai fait ça...mais si je me souviens bien def c'est pour définir la fonction PGCD.
Quand à abs je crois que ça retourne la valeur absolue...
Le programme que j'avais fait à la base calculait le PGCD de deux nombres donné par l'utilisateur, je vous le donne, vous verrez il fonctionne bien celui là...
- Code: Tout sélectionner
while 1:
print("===Calcul de PGCD===")
print("Rappel:Si a et b sont deux entiers naturels non nuls, Alors parmi tous les diviseurs commun à a et b, le plus grand est noté PGCD(a,b)")
def PGCD(a,b):
return b,abs(a-b)
a=input("Rentrez un nombre a:")
b=input("Rentrez un nombre b:")
a=int(a)
b=int(b)
c,d=a,b
while a!=b:
a,b=PGCD(a,b)
if b==1:
print("Les nombres",c,"et",d,"sont premiers entre eux car leur PGCD vaut 1")
else:
print("Le PGCD des nombres",c,"et",d,"vaut",b,".")
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 14:00
-
par fatal_error » 12 Juin 2012, 23:25
ouais donc en gros t'as pas compris l'algo.
et c'est pas moi qui vais te l'expliquer.
Mais ce qui est sur, c'est que la fonction PGCD a été nommée par un goret.
Hormis le fait que ca soit écrit en majuscule toussa.
La fonction PGCD aurait du être
- Code: Tout sélectionner
def Iter_PGCD(a,b):
return b,abs(a-b)
def PGCD(a,b):
while a!=b:
a,b=Iter_PGCD(a,b)
return b
parce que bon, une fonction PGCD qui retourne deux nombres... :lol3:
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 20:42
-
par Rockleader » 12 Juin 2012, 23:33
Bon je vais repasser tout ça alors...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités