Matematica Discreta I - Matematica e Informatica

Matematica Discreta II
Lezione del giorno 17 ottobre 2007
Dato il monoide Zm={[0], [1], …., [m-1]} delle classi di congruenza modulo m rispetto al prodotto
di classi, sappiamo che gli elementi simmetrizzabili formano un gruppo Zm* rispetto alla stessa
operazione. Per quanto già dimostrato si ha:
Zm* = {[x] Zm / x=1,2,….,m-1; x,m coprimi}
Identificando [x] con il rappresentante numerico x, si può anche identificare Zm* con l’insieme dei
numeri naturali x tali che 1xn-1, e tali che x,m siano coprimi: con tale identificazione il prodotto
di due elementi x,y in Zm* è definito dalla riduzione modulo m del prodotto aritmetico xy, mentre il
simmetrico di un elemento x in Zm* è definito dalla riduzione modulo m del coefficiente di x nella
scrittura di 1 come combinazione lineare di x,m (calcolata con l’algoritmo Euclideo).
Ricordiamo i dettagli dell’algoritmo Euclideo delle divisioni successive.
Siano dati i numeri naturali a,b (con a>b): si effettua una prima divisione di a (dividendo) per b
(divisore) ottenendo quoziente q1 e resto r1, dove q1, r1 sono interi 0, con r1<b; si effettuano poi
successive divisioni con la regola seguente: effettuata la divisione numero k, se il resto è 0
l’algoritmo si arresta, mentre se il resto è >0 si effettua un’ulteriore divisione numero k+1, in cui il
dividendo e il divisore sono rispettivamente il divisore e il resto della divisione numero k; l’ultimo
resto non nullo è il mcd(a,b).
Schematizzando:
a=bq1+r1 (q10, 0<r1<b)
b=r1q2+r2 (q20, 0<r2<r1)
r1=r2q3+r3 (q30, 0<r3<r2)
.
.
rn-3=rn-2qn-1+rn-1 (qn-10, 0<rn-1<rn-2)
rn-2=rn-1qn+rn (qn0, rn=0)
rn-1=mcd(a,b)
Parallelamente si possono calcolare i coefficienti interi relativi x,y tali che mcd(a,b)=ax+by:
si costruiscono le 2 seguenti successioni di numeri interi relativi
s0 ,s1,…..,sn ; t0,t1,….,tn
ponendo
s0=1, s1=0, si=si-2-si-1qi-1 (per ogni i>1);
t0=0, t1=0, ti=ti-2-ti-1qi-1 (per ogni i>1)
dove qi-1 è il quoziente della divisione numero (i-1) nell’algoritmo Euclideo.
e basta poi porre x=sn ,y=tn per avere i coefficienti x, y.
Esempio.
Se a=89, b=33, nell’algoritmo Euclideo si effettuano n=5 divisioni con i seguenti valori di
quoziente e resto:
q1=2, r2=23; q2=1, r2=10; q3=2, r3=3; q4=3, r4=1; q5=3, r5=0
concludendo che mcd(89,33)=r4=1.
Calcolando le successioni si, ti si ottiene s5=x=-10, t5=y=27, 1=89x+33y.
In particolare si ottiene che [33] è simmetrizzabile in Z89 con simmetrico [27].
Per capire la complessità di calcolo dell’algoritmo Euclideo (e quindi anche dell’algoritmo per il
calcolo del simmetrico di un elemento simmetrizzabile di Zm) cercheremo di maggiorare il numero
di divisioni che si effettuano nell’algoritmo stesso.
Prima introduciamo il principio di induzione, che si presenta in 2 forme:
Ia forma del principio di induzione: se P(n) è un predicato nella variabile n (numero naturale) e se
a) P(1) è vero
b) per ogni naturale k, P(k) vero  P(k+1) vero
allora P(n) è vero per ogni naturale n.
(forma già dimostrata nel corso di Matematica Discreta I)
IIa forma del principio di induzione: se P(n) è un predicato nella variabile n (numero naturale) e
se
a) P(1) è vero
b) per ogni naturale k>1, P(1), P(2), …., P(k-1) veri  P(k) vero
allora P(n) è vero per ogni naturale n.
Dimostrazione:
Per assurdo sia non vuoto l’insieme S dei naturali x tali che P(x) è falso e sia s il minimo in S
(quindi P(s) è falso). Si ha s>1 (per l’ipotesi a)), ed essendo 1,2,…,s-1S, P(1),P(2),…,P(s-1) sono
veri, dunque P(s) è vero (per l’ipotesi b)), contraddizione
La successione Fn (con n0) dei numeri di Fibonacci è definita ponendo:
F0=F1=1, Fn=Fn-1+Fn-2 (per ogni n>1).
Quindi F2=2; F3=3, F4=5, F5=8 etc…
Tale successione interviene in molti problemi combinatori.
Ricordiamo anche alcuni concetti geometrici: se AB è un segmento di estremi A,B è di lunghezza a
(con a reale >0), si chiama parte aurea di AB un segmento AO (dove O è un punto interno ad AB)
tale che la lunghezza x di AC sia media proporzionale fra a e la lunghezza (a-x) del segmento CB:
a : x = x : (a-x)
da cui si ricava x2+ax-a2 = 0, x = a(-1 5 )/2
Essendo x>0, l’unico valore accettabile è x = a(-1+ 5 )/2, da cui a/x = 2/(-1+ 5 )=( 5 +1)/21,61
(è il cosiddetto rapporto aureo o numero d’oro).
Il concetto di parte aurea di un segmento ha molte applicazioni geometriche: per esempio il lato del
decagono regolare ha la stessa lunghezza della parte aurea del raggio della circonferenza
circonscritta.
Se  indica il numero d’oro, possiamo notare che , essendo x è soluzione di x 2+ax-a2 = 0, dividendo
per x2 si ottiene che  = a/x soddisfa l’identità:
1 +  - 2 = 0
da cui:
2 = 1+
(*)
Il numero d’oro ha una relazione con la successione dei numeri di Fibonacci Fn .
Calcolando le potenze di base  ad esponente naturale e confrontandole con alcuni valori di Fn,
osserviamo che:
F1=1 < 11,61 < F2=2 < 22,6 < F3=3 < 34,2 < F4=5
e si può congetturare che si abbia :
Fn < n < Fn +1 (**) per ogni naturale n.
Possiamo dimostrare che ciò è vero, ragionando per induzione (IIa forma). Per n=1 abbiamo già
notato che (**) è vero.
Supponiamolo vero per n=1,….,k-1, e dimostriamolo vero per n=k; poiché (**) è per ipotesi vero
in particolare per n=k-1, n=(k-2), si ha Fk-1 < k-1< Fk , Fk-2 < k-2< Fk-1 , da cui, sommando, si ha:
Fk = Fk-1+Fk-2 < k–1 + k–2 < Fk+Fk-1 = Fk+1
Ma dalla (*) segue che:
k–1 + k–2 = k–2(1+) = k
quindi la (**) é vera per n=k.
Siano a,b numeri naturali, con a>b. Effettuiamo le n divisioni successive dell’algoritmo Euclideo:
a=bq1+r1 (q10, 0<r1<b)
b=r1q2+r2 (q20, 0<r2<r1)
r1=r2q3+r3 (q30, 0<r3<r2)
.
.
.
rn-3=rn-2qn-1+rn-1 (qn-10, 0<rn-1<rn-2)
rn-2=rn-1qn+rn (qn0, rn=0)
rn-1=mcd(a,b)
Per costruzione si ha :
a > b > r1 > r2 > …….. > rn-1 > 0=rn
dunque in particolare i quozienti qi sono tutti non nulli.
Poniamo per omogeneità r0=b (in modo che la prima divisione sia a=r0q1+r1) e dimostriamo che si
ha:
rn-j  Fj+1
per ogni j naturale
Ragioniamo per induzione (IIa forma).
Per j=1 si ha (essendo rn-1>0) : rn-1  F2 = 1.
Fissato k>1, supponiamolo vero per tutti i j=1,2,…,k-1 e dimostriamolo vero per j=k.
Essendo vero in particolare per j=k-1, j=k-2, si ha:
rn-k+1  Fk , rn-k+2  Fk-1
Ricavando il resto rn-k dalla divisione numero n-k+2 si ha (tenendo conto che qn-k+21):
rn-k = rn-k+1qn-k+2+rn-k+2  rn-k+1+rn-k+2  Fk + Fk-1 = Fk+1
come si voleva.
In particolare, per j=n, si ha b = r0  Fn+1 , ma n-1 < Fn+1 (per la proprietà già dimostrata che lega i
numeri di Fibonacci alle potenze del numero d’oro ), dunque n-1 < b, ossia (estraendo il
logaritmo in base 10):
(n-1)log10 < log10b
Poiché log100,206>1/5 si ottiene (n-1) < (log10b)/5
Se t è il numero di cifre nella rappresentazione di b in base 10 si ha :
10t-1  b< 10t
e dunque log10b < t, da cui n  5t.
In pratica quindi il numero di divisioni nell’algoritmo Euclideo non è superiore al quintuplo del
numero di cifre del più piccolo dei numeri a,b (rappresentati in base 10).
Per esempio se a=F11=144, b=F10=89, si effettuano n=10 divisioni (per concludere che 1=mcd(a.b)),
quindi il numero di divisioni in questo caso coincide esattamente con il quintuplo del numero di
cifre del più piccolo dei numeri a,b (rappresentati in base 10).