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
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti