Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 30-01-2009 19:15:03

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

[Python] PGCD par l'axiome d'Euclide

#!/usr/bin/env python
# -*- coding: cp1252 -*-

def pgcd(a,b,pgcd):
    c,d=max(a,b),min(a,b)   # détermination du Dividende et du diviseur
    while d>0:
        c,d=d,c%d
    pgcd = c
    return pgcd

a,b=233625,15547875
pgcd=pgcd(a,b,1)

print
print "*** Calcul du PGCD (axiome d'Euclide) ***"
print "    PGCD("+str(a)+","+str(b)+") = "+str(pgcd)
print

Affichage :

*** Calcul du PGCD (axiome d'Euclide) ***
    PGCD(233625,15547875) = 2625

Arx Tarpeia Capitoli proxima...

Hors ligne

#2 26-03-2012 04:40:03

Arnaud Alies
Invité

Re : [Python] PGCD par l'axiome d'Euclide

Voila mon script beaucoups plus optimiser... j'ai fais en 10 mins mais marche bien....


import sys

def main():
  try:
    try:
      a = int(sys.argv[1])
      b = int(sys.argv[2])
    except:
      sys.stdout.write("Entre des chiffres...")
      a = input("A = ")
      b = input("B = ")
  except:
    sys.stdout.write("Entre des chiffres\n\r")
    sys.exit()
  c = 1
  while a != 0 and b != 0 and c != 0:
    try:
      c = (a%b)
      a = (b%c)
      b = (c%a)
    except ZeroDivisionError:
      pass
  if a <= b <= c:
    sys.stdout.write("Le pgcd de cette division est %i\n\r" % b)
  elif b <= a <= c:
    sys.stdout.write("Le pgcd de cette division est %i\n\r" % a)
  elif a <= c <= d:
    sys.stdout.write("Le pgcd de cette division est %i\n\r" % c)
   
  return 0

if __name__ == '__main__':
  main()
 

#3 07-05-2012 05:42:52

Arnaud Alies
Invité

Re : [Python] PGCD par l'axiome d'Euclide

j'ai refait rapidement (je deteste l'imperfection en programmation)


def pgcd(a, b):
    r = a%b
    while r != 0:
        a = b
        b = r
        r = a%b
    return b

def main():
    try:
        a = input("A = ")
        b = input("B = ")
    except NameError:
        print("Entre des chiffres la prochaine fois!")
    print("resultat: %i" % (pgcd(a,b)))
    return 0

if __name__ == '__main__':
    main()
 

#4 10-12-2017 11:23:15

etienne
Invité

Re : [Python] PGCD par l'axiome d'Euclide

easier:

def euclide(a,b):
    u=a
    v=b
    while v!=0:
        r=u%v
        u=v
        v=r
    return u

#5 10-12-2017 12:48:50

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : [Python] PGCD par l'axiome d'Euclide

Bonjour,

Le temps et la pratique faisant leur œuvre, on progresse...
Donc plus court encore  et tout aussi simple :

def euclide(u,v):
    while v!=0:
        u,v=v,u%v
    return u

euclide(233625,15547875)

Et enfin (Python toutes versions > 2.5) :


from fractions import gcd

print (gcd(233625,15547875))

^_^

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Pied de page des forums