Es. 10. 08/05
Da aptiva.
Gaetana oggi ha proposto questa soluzione:
def MCD(a,b): while b!=0: a,b=b,a return a def mcm(a,b): return a//mcd(a,b)*b
Queste funzioni non sono mai state provate. Infatti la seconda (mcm) genera un errore:
NameError: global name 'mcd' is not defined
e la prima (MCD) per ogni valore di a e b finisce in un loop eterno.
Guardare come altri hanno risolto il problema e' lecito ed e' il modo corretto per imparare. Ma per imparare occorre provare che la soluzione funzioni veramente e capirne il funzionamento.
Appare che questa soluzione sia stata solamente copiata (peraltro in modo incompleto) da pagine web come per esempio la pagina di Wikipedia: http://it.wikipedia.org/wiki/Algoritmo_di_Euclide
La nuova soluzione proposta (30.05) e' corretta:
def MCD(a, b):
while b>0: #calcola il massimo comun divisore di due interi usando il metodo di Euclide
resto=a%b
a=b
b=resto
return a
def mcm(a,b):
return a*b/MCD(a,b) #il mcm ? uguale al prodotto dei due numeri diviso il loro massimo comune divisore
n1=input("Dammi il primo numero")
n2=input("Dammi il secondo numero")
mass_com_div = MCD(n1,n2)
min_com_mult = mcm(n1,n2)
print "Il MCD = ", mass_com_div
print "Il mcm = ",min_com_mult
si puo' rendere piu' in stile python usando l'assegnazione di tuple. al posto di
while b>0:
resto=a%b
a=b
b=resto
si puo' scrivere:
while b>0:
a,b=b,a%b