Calcolo del MASSIMO COMUNE DENOMINATORE M C D

  • Slides: 15
Download presentation
Calcolo del MASSIMO COMUNE DENOMINATORE (M. C. D) col metodo di Euclide Francesco Piovano

Calcolo del MASSIMO COMUNE DENOMINATORE (M. C. D) col metodo di Euclide Francesco Piovano 229316 Mu. Eta

ALGORITMO Realizzazione dell’ algoritmo di Euclide per trovare il MASSIMO COMUNE DENOMINATORE fra due

ALGORITMO 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.

I metodo: seguo la definizione Cerco il passo importante, suggerito dalla definizione di MCD

I metodo: seguo la definizione Cerco il passo importante, suggerito dalla definizione di MCD (fissati due numeri interi A e B): Se ((A MOD divisore) = 0) AND ((B MOD divisore) = 0) mcd divisore A parole, se divisore divide pienamente A e B, allora è un potenziale max com. div.

Stabilisco quante volte ripetere il test. Posso provare con valori di divisore da 1

Stabilisco quante volte ripetere il test. Posso provare con valori di divisore da 1 al minimo tra A e B: l’ultimo trovato sarà il max cercato. Con divisore da 1 a min_AB Se ((A MOD divisore) = 0) AND ((B MOD divisore) = 0) mcd divisore

Completo l’algoritmo: Leggo A e B Se A > B min_AB B Altrimenti min_AB

Completo l’algoritmo: Leggo A e B Se A > B min_AB B Altrimenti min_AB A Con divisore da 1 a min_AB Se ((A MOD divisore) = 0) AND ((B MOD divisore) = 0) mcd divisore Stampo mcd

Metodi più efficienti: Euclide È possibile costruire due algoritmi differenti basandosi sulle considerazioni di

Metodi più efficienti: Euclide È 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

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

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

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

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

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

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,

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 <

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é

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