Teoria dei numeri Lezione del giorno 2 aprile 2009 Insiemi dotati di operazione. Dato un insieme A non vuoto, una operazione in A è una funzione f: AxA A che associa ad ogni coppia (a,b)A di operandi un unico risultato f(a,b)A (indicato anche con a b). L’operazione soddisfa la proprietà associativa se per ogni a,b,cA si ha (a b) c= a (b c). L’operazione soddisfa la proprietà commutativa se per ogni a,bA si ha a b = b a. Un elemento neutro in A è un elemento eA tale che per ogni aA si ha a e = e a=a. Se vale la proprietà associativa A è un semigruppo; un semigruppo in cui esiste un elemento neutro è un monoide, Se A è un monoide con neutro eA, un elemento aA è simmetrizzabile se esiste a’A (detto simmetrico di a) tale che a a’ = a’ a=e. Un gruppo è un monoide in cui tutti gli elementi sono simmetrizzabili. Se A è un monoide, l’insieme A* di tutti gli elementi simmetrizzabili è non vuoto (contiene almeno il neutro di A) ed è un gruppo rispetto alla stessa operazione di A. Useremo spesso la notazione moltiplicativa ab oppure ab per indicare il risultato dell’operazione (in questo caso il neutro sarà detto unità e indicato con 1A, il simmetrico di a sarà detto inverso di a e indicato con a-1), oppure la notazione additiva a+b (in questo caso il neutro sarà detto zero e indicato con 0A, il simmetrico di a sarà detto opposto di a e indicato con –a). Esempi. L’insieme N dei naturali è semigruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto. L’insieme Z degli interi relativi è gruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto: in questo caso il gruppo degli elementi invertibili è Z*={1,-1}. L’insieme Q dei razionali relativi (rispettivamente R dei reali relativi) è gruppo commutativo rispetto alla somma e monoide commutativo rispetto al prodotto: in questo caso il gruppo degli elementi invertibili è Q*= Q -{0} (rispettivamente R*= R -{0}). Operazioni in Zm Fissato il modulo m>1, nell’insieme Zm={[0],[1],…,[m-1]} delle classi di congruenza modulo m si possono definire le operazioni di somma e prodotto ponendo per ogni [a], [b]Zm: [a] + [b] = [a+b] [a][b] = [ab] L’unicità dei risultati, indipendenti dai rappresentanti a,b delle classi, è facile da verificare: se [a]=[c], [b]=[d] allora ac (mod m), bd (mod m), da cui a-c=km, b-d=hm (con h,kZ), e si deduce (a+b)-(c+d)=(h+k)m,ab-cd=(kb+hc)m,a+bc+d (mod m), abc+d (mod m), [a+b]=[c+d], [ab]=[cd]. Rispetto alla somma Zm è gruppo commutativo (il neutro è [0], l’opposto di [a] è [m-a], perché [a]+[m-a]=[m]=[0]) e rispetto al prodotto è monoide commutativo (il neutro è [1]). Se rappresentiamo le classi di congruenza [0],[1],…,[m-1]Zm identificandole con i valori numerici 0,1,….,m-1 (per esempio allo scopo di inserirle come dati in un algoritmo implementato al computer), comunque presi i valori a,b=0,1,….,m-1 i risultati delle operazioni di somma e prodotto si ottengono con la riduzione modulo m (la somma è (a+b)modm, il prodotto è (ab)modm). Con tale rappresentazione numerica delle classi di congruenza, possiamo calcolare la complessità di calcolo delle operazioni in Zm. Poiché i casi a=0 o b=0 sono banali, possiamo supporre 0<a,b<m. Sia poi k=L(m) la lunghezza (binaria) di m: si ha L(a), L(b)L(m)=k. Complessità della somma in Zm: sappiamo che la somma a+b dei numeri naturali a,b ha complessità lineare O(k); si ha a+b<2m, dunque L(a+b)L(2m)=L(m)+1=k+1, e dunque la riduzione (a+b)modm (essendo ottenuta come resto della divisione di (a+b) per m) ha complessità O((k+1)2) ossia O(k2). Complessivamente la somma in Zm ha complessità polinomiale O(k2). Complessità del prodotto in Zm: sappiamo che il prodotto ab dei numeri naturali a,b ha complessità quadratica O(k2); si ha ab<m2, dunque L(ab)L(m2)2L(m)=2k, e dunque la riduzione (ab)modm (essendo ottenuta come resto della divisione di (ab) per m) ha complessità O((2k)2) ossia O(k2). Complessivamente il prodotto in Zm ha complessità polinomiale O(k2). Non tutti gli elementi di Zm sono invertibili rispetto al prodotto: per esempio [0] certamente non lo è, in quanto [0][x]=[0] per ogni [x] in Zm. Per quanto riguarda le classi non nulle: Teorema. Una classe [a]Zm, con 1am-1, è invertibile rispetto al prodotto se e solo se a,m sono coprimi. Dimostrazione: Se [a] è invertibile, esiste [b] tale che [a][b]= [ab]= [1], da cui ab1 (mod m), ab-1=mk, con k intero, 1=ab+m(-k)=combinazione lineare di a,m, da cui 1=mcd(a,m). Viceversa se 1=mcd(a,m), allora 1=ax+by con x,y interi, ax1 (mod m), [a][x]= [ax]= [1], e [x] è l’inverso di [a]. Dalla dimostrazione precedente si deduce che, se a,m sono coprimi, l’inverso di [a] in Zm è [x], dove x è il coefficiente di a nella rappresentazione di 1 come combinazione lineare di a,m; in particolare l’inverso di [a] si può calcolare con l’algoritmo Euclideo esteso che (essendo a<m) ha complessità polinomiale O(k3) nella lunghezza k dell’input m. Se identifichiamo le classi di congruenza modulo m con i valori numerici 0,1,….,m-1, l’inverso di a con 1am-1 (se a,m sono coprimi) è la riduzione xmodm dove x è come sopra: trovato x con l’algoritmo Euclideo esteso, si tratta di calcolare xmodm, ma (come notato nella costruzione delle successioni si, ti dell’algoritmo) x è sempre (in valore assoluto) <m, dunque se x>0 si ha xmodm=x, mentre se x<0 si ha xmodm=m-(-x)=m+x, e in ogni caso globalmente l’algoritmo per calcolare l’inverso a-1=xmodm resta di complessità polinomiale O(k3) nella lunghezza k dell’input m. Abbiamo dimostrato che le classi invertibili di Zm (rispetto al prodotto) sono tante quanti gli interi a coprimi con m tali che 1am-1, o equivalentemente quanti gli interi a coprimi con m tali che 1am: tale numero, che esprime la cardinalità gruppo Zm* degli elementi invertibili del monoide Zm (rispetto al prodotto), è detto funzione di Eulero dell’intero m>1 ed è indicato con (m). Esponenziazione modulare Sia m>1 un intero, fissiamo un esponente intero positivo hm, un elemento [x] in Zm (con 0x<m), e poniamoci il problema di trovare un algoritmo per calcolare la potenza [x h] (equivalentemente la riduzione xhmodm). Esporremo un algoritmo molto efficiente (di complessità polinomiale), detto esponenziazione modulare. Siano k=L(m), t=L(h) le lunghezze (binarie) del modulo m e dell’esponente h: essendo hm si ha tk. Poiché t rappresenta il numero di cifre binarie di h, si ha: h=at-12t-1+ at-22t-2+….+a12+a0 (con ai=0,1) Costruiamo una successione y0,y1,...,yt di numeri interi ponendo: 2 a y0=1; per ogni i>0 yi= (y i1 x t i ) modm Ogni elemento della successione yi è una riduzione modulo m, dunque 0≤yi<m; inoltre ogni elemento della successione yi (con i>0) si può calcolare (a partire dal precedente) con la riduzione di due prodotti con fattori <m (il quadrato di yi-1 e il prodotto del risultato per x a t i , quest’ultimo uguale ad x oppure ad 1, poiché l’esponente at-1 è =0,1), dunque (come visto esaminando la complessità del prodotto in Zm) il calcolo di ogni yi con i>0 ha complessità O(k2); il numero degli elementi della successione da costruire è tk, dunque complessivamente l’algoritmo ha complessità polinomiale O(k3). Dimostriamo che tale algoritmo fornisce il valore della riduzione x kmodm: precisamente dimostriamo che si avrà yt= xkmodn. Dimostriamo prima per induzione che per ogni i con 1it, si ha: i -2 i -1 yi x (a t -1 2 a t -2 2 . a t -i1 2 a t -i ) (mod m) (*) Si ha y1= (y 0 2 x a t -1 ) modm quindi y1 x a t -1 (mod m), e la (*) è vera per i=1. Supponiamo (*) vera per i e dimostriamola per i+1: si hanno le seguenti congruenze modulo m i -1 i -1 i i yi+1 (y i 2 x a t i-1 ) x[2(at -1 2 a t -2 2 . a t -i1 2 a t -i ) a t -i-1 ] = x (a t -1 2 a t -2 2 . a t -i 2 a t -i-1 ) quindi la (*) è vera per i+1. In particolare, per i=t, si ottiene la congruenza: yt x (a t-1 2 a t-2 2 . a1 2 a 0 ) = xk (mod n) Poiché, come già notato, si ha 0≤yi<m, la precedente congruenza implica che yt = xkmodm. Notiamo che nell’algoritmo anche la grandezza dei numeri coinvolti nei calcoli è limitata: ad ogni passo si moltiplicano fattori <m e si riduce il risultato modulo m, quindi si lavora sempre con numeri <m2. t -1 t -2 Esempio. Siano m=341, x=2, e calcoliamo [2340] in Z341. Si tratta quindi di calcolare con l’esponenziazione modulare la riduzione 2340mod341. La rappresentazione binaria dell’esponente 340 è: 340 = 128+027+126+025+124+023+122+021+0 = (101010100)2 Seguendo i passi dell’algoritmo, costruiamo la successione y0,y1,y2,y3,y4,y5,y6,y7,y8,y9 con y0=1 e per i>0 yi= (yi 12 2a 9i ) mod341 , dove at-i è la cifra binaria coefficiente di 2t-i in 340. Si ha: y1= (12 2a 8 ) mod341=2 ; y2= (12 2a 7 ) mod341=4 ; y3= (4 2 2a 6 ) mod341=32 ; y4= (32 2 2a 5 ) mod341=1 ; y5= (12 2a 4 ) mod341=2 ; y6= (2 2 2a 3 ) mod341=4 ; y7= (4 2 2a 2 ) mod341=32 ; y8= (3222a1 ) mod341=1 ; y9= (12 2a 0 ) mod341=1=2340mod341. Possiamo allora concludere che [2340]=[1] in Z341.