Es. 10. 08/05
Da aptiva.
Versione delle 09:32, 30 mag 2014, autore: Renzo (Discussione | contributi)
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