MASSIMO COMUNE DENOMINATORE (M.C.D) Calcolo del MASSIMO COMUNE DENOMINATORE (M.C.D) col metodo di Euclide Francesco Piovano 229316
ALGORITMO interi A e B. Studio del problema nel suo dominio specifico: Realizzazione dell’ algoritmo di Euclide per trovare il MASSIMO COMUNE DENOMINATORE fra due numeri interi A e B. Studio del problema nel suo dominio specifico: Il MASSIMO COMUNE DENOMINATORE fra due numeri interi A e B che non siano uguali a 0 è il più grande numero naturale per il quale possono essere divisi. Per convenzione, MCD(A, 0) = A.
È possibile costruire due algoritmi differenti basandosi sulle considerazioni di Euclide. È possibile utilizzare il: -Metodo per «sottrazioni successive» -Metodo delle «divisioni»
Metodo sottrazioni succesive Siano A e B interi (supponiamo, senza perdere generalità, che sia A > B), e abbiano M come massimo comune divisore. Allora possiamo porre: A = h M e B = k M con h, k che variano in N. Calcolando la differenza tra A e B, si ha: A - B = (h M) - (k M) = (h-k) M Il risultato è che M è fattore anche della differenza, e differenza < A, per cui è possibile ripetere il procedimento sostituendo al minuendo, in questo caso A, il valore ottenuto. Calcoleremo A - B se A > B, altrimenti B - A se A < B fino a quando: A – B = 0 A = B = M.C.D
Esempio Calcolare il M.C.D tra A=8 e B=6: 1)A-B=8-6=2 A=2, B=6 2)B-A=6-2=4 A=2, B=4 3)B-A=2 A=2, B=2 4)A-B=0 A=B=M.C.D
Passo Significativo Occorre individuare il passo significativo: Perché l’operazione di sottrazione sia lecita in N occorre che il minuendo sia maggiore del sottraendo! Allora dati due numeri interi A e B: Se A>B allora differenza= A-B A differenza Altrimenti differenza=B-A B differenza Il passo significativo deve essere ripetuto fino a quando la differenza = 0, ovvero A = B. A=B=MCD
Algoritmo Leggi numero_A e numero_B Finché A ≠ B Se numero_A > numero_B Calcola differenza_D = numero_A - numero_B Poni differenza_D in numero_A Altrimenti Calcola differenza_D = numero_B - numero_A Poni differenza_D in numero_B Stampa “massimo_comune_denominatore “, numero_A
Metodo delle divisioni Calcoliamo il M.C.D tra A e B interi (per brevità A > B): A = h M e B = k M con h, k che variano in N Calcolando il rapporto tra A e B, si ha: A = q B + r con q = quoziente divisione, r = resto A = q B + r h M = q k M + r Portando al primo membro: (h - q k) M = r Il resto della divisione ha ancora M come fattore (e r < B), per cui è possibile ripetere il procedimento sostituendo al dividendo, in questo caso A, il divisore B e il resto ottenuto diventa il nuovo divisore. Iteriamo il procedimento fino a quando: A = q B + r con r = 0 M.C.D = B* (l’ultimo divisore utilizzato)
ALGORITMO Occorre individuare il passo signifivativo: Calcola numero_A MOD numero_B in resto Poni numero_B in numero_A Poni resto in numero_B Il passo significativo deve essere ripetuto fino a quando il resto ≠ 0 .
ALGORITMO Leggi numero_A e numero_B Se numero_A < numero_B /* scambia A con B, usando una cella di appoggio temp */ Poni numero_B in temp Poni numero_A in numero_B Poni temp in numero_A Poni 1 in resto /* inizializzazione */ Finché resto ≠ 0 Calcola numero_A MOD numero_B in resto Poni numero_B in numero_A Poni resto in numero_B Stampa “massimo_comune_denominatore “, numero_A
Raffinamento dell’algoritmo Si può evitare lo scambio tra A e B quando A < B. Infatti se A < B, il resto della divisione tra A e B dà A, e i passi successivi Poni numero_B in numero_A Poni resto in numero_B effettuano lo scambio.
Algoritmo definitivo Leggi numero_A e numero_B Poni 1 in resto /* inizializzazione */ Finché resto ≠ 0 Calcola numero_A MOD numero_B in resto Poni numero_B in numero_A Poni resto in numero_B Stampa “massimo_comune_denominatore “, numero_A