Algoritmo di Euclide per il
calcolo del massimo comun divisore
Per un intero x definiamo D(x) come l'insieme dei divisori di
x.
Ovvero D(x) = {z appartenente a N+ tale che esiste q di N. x = zq}
MCD(x,y) = max(D(x) intersezione D(y))
Euclide dimostra 2 teoremi:
- se x = qy + r allora
D(x) intersezione D(y) = D(y) intersezione D(r)
dim.: bisogna dimostrare che
z appartiene a D(x) intersezione D(y) se e solo se
z appartiene a D(y) intersezione D(r)
Se z appartiene a D(x) intersezione D(y)
allora esistono q1 e q2 tali che x = z q1 e y = z q2
per ipotesi x = qy + r e quindi z q' = q (z q2) + r
da cui r = z (q2 - q q1)
quindi r è divisibile per z
cioè z appartiene a D(y) intersezione D(r)
c.d.d. (analogamente il viceversa)
corollario:
MCD(x,y) =
MCD(y,r)
infatti, poichè
D(x) intersezione D(y) = D(y) intersezione D(r)
abbiamo che max(D(x) intersezione D(y)) = max(D(y) intersezione
D(r))
c.d.d.
- se x = q y allora
MCD(x,y) = y
dim: y = max(D(y))
Algoritmo risultante:
- FINCHÉ y è diverso da 0 RIPETI
- calcola resto della divisione tra x e y
- scambia x con y
- assegna a y il valore del resto
- il MCD è x
|
Esempio:
dati x = 132 e y = 24,
si ha 132 = 5*24+12 e 24 = 2*12 + 0
quindi MCD(132,24) = MCD(24,12) = MCD(12,0) = 12
(0 è divisibile per qualsiasi numero!)