Aritmetica, crittografia e codici
 9788847004559, 8847004551, 9788847004566, 884700456X

Citation preview

Aritmetica, crittografia e codici

W.M. Baldoni, C. Ciliberto G.M. Piacentini Cattaneo

Aritmetica, crittografia e codici

13

WELLEDA MARIA BALDONI Dipartimento di Matematica Università di Roma Tor Vergata, Roma CIRO CILIBERTO Dipartimento di Matematica Università di Roma Tor Vergata, Roma GIULIA MARIA PIACENTINI CATTANEO Dipartimento di Matematica Università di Roma Tor Vergata, Roma Gli Autori desiderano ringraziare il Dottor Alberto Calabri che ha collaborato alla produzione del presente libro In copertina: “S’è rotto l’incanto”, Giacomo Balla (1958) © by SIAE 2006

Springer-Verlag fa parte di Springer Science+Business Media springer.com © Springer-Verlag Italia, Milano 2006 ISBN 10 88-470-0455-1 ISBN 13 978-88-470-0455-9

Quest’opera è protetta dalla legge sul diritto d’autore. Tutti i diritti, in particolare quelli relativi alla traduzione, alla ristampa, all’uso di figure e tabelle, alla citazione orale, alla trasmissione radiofonica o televisiva, alla riproduzione su microfilm o in database, alla diversa riproduzione in qualsiasi altra forma (stampa o elettronica) rimangono riservati anche nel caso di utilizzo parziale. Una riproduzione di quest’opera, oppure di parte di questa, è anche nel caso specifico solo ammessa nei limiti stabiliti dalla legge sul diritto d’autore, ed è soggetta all’autorizzazione dell’Editore. La violazione delle norme comporta sanzioni previste dalla legge. L’utilizzo di denominazioni generiche, nomi commerciali, marchi registrati, ecc., in quest’opera, anche in assenza di particolare indicazione, non consente di considerare tali denominazioni o marchi liberamente utilizzabili da chiunque ai sensi della legge sul marchio. Riprodotto da copia camera-ready fornita dagli Autori Progetto grafico della copertina: Simona Colombo, Milano Stampato in Italia: Signum, Bollate (Mi)

Introduzione

La matematica, forse a causa dell’astrazione che la caratterizza, ha fama di essere disciplina con esclusiva valenza intellettuale, assai remota dunque dalle ` sorprendente che questa idea alligni talvolta non comuni attivit` a umane. E solo tra i non addetti ai lavori, ma anche tra i matematici di professione. Tanto che questi ultimi parlano spesso di matematica pura contrapponendola a matematica applicata e assegnando talvolta alla prima una sorta di malinteso diritto di primogenitura. ` stato per contro osservato da qualcuno che le suddette due categorie E non esistono, ma, cos`ı come esistono buona o cattiva letteratura, o pittura o musica, esistono buona o cattiva matematica: la prima `e applicabile, anche se non appare a prima vista, in mille contesti, la seconda non vale nulla, neanche nell’ambito della matematica stessa. Vero `e d’altra parte che due nostri colleghi, che di applicazioni se ne intendono, iniziano la prefazione di un volume di questa stessa collana (cfr. [44]) con l’interessante frase: In teoria, non vi `e alcuna differenza fra teoria e pratica. In pratica ce n’`e. Noi non crediamo tuttavia che questa differenza sia da attribuire alla natura intrinseca delle teorie matematiche ma piuttosto all’attitudine del singolo matematico che quelle teorie crea o adopera. Ad esempio, fino a non molti anni fa la disciplina matematica pi` u contigua alle applicazioni veniva senz’altro considerata l’analisi matematica, con particolare riferimento allo studio delle equazioni differenziali. Le branche della matematica meno vicine alle applicazioni erano invece ritenute l’algebra e la teoria dei numeri. Tanto che un matematico della qualit` a di G. H. Hardy sostenne, nel suo libro [24], la supremazia della teoria dei numeri da considerarsi vera regina della matematica, proprio in virt` u della sua distanza dagli interessi spiccioli della vita quotidiana. La qual cosa la rendeva, a suo avviso, “gentle and clean”. Davvero una strana opinione questa, visto che i primi sviluppi dell’algebra e della teoria dei numeri presso gli arabi e i mercanti occidentali nel medioevo trovano la propria motivazione proprio da problemi assai concreti di natura amministrativa e contabile.

VI

Introduzione

L’idea di Hardy, che risale agli anni ’40 dello scorso secolo, si basava su ` un preconcetto, peraltro largamente condiviso anche in ambienti scientifici. E singolare che Hardy non sapesse, o facesse finta di non sapere, che A. Turing, che lui ben conosceva, aveva adoperato proprio quella matematica da lui ritenuta cos`ı asettica per decifrare, per conto dei servizi segreti inglesi, il codice Enigma, assestando in tal modo un colpo mortale allo spionaggio tedesco (cfr. [26]). Il ruolo svolto dall’algebra e dalla teoria dei numeri nella crittografia a scopi militari o industriali `e d’altra parte ben noto da tempo immemorabile. Forse Hardy, erroneamente, riteneva che gli strumenti matematici usati fino ad allora in crittografia, bench´e talvolta assai complicati, fossero tuttavia elementari nella sostanza, trattandosi di artifici combinatorici, che richiedessero un certo estemporaneo genio per essere inventati o scardinati, ma che non dessero sbocco a teorie solide, importanti e durature. Gli sviluppi dell’informatica negli ultimi sessant’anni hanno reso la crittografia essenziale in ogni aspetto della vita della nostra societ` a. Precisamente la crittografia si occupa della trasmissione di informazioni cifrate in modo che solo le persone autorizzate che le ricevono siano in grado di decifrarle, di essere sicuri della loro provenienza, fedelt` a e autenticit` a. Lo sviluppo di nuove tecniche crittografiche non classiche, come quelle a chiave pubblica, hanno incrementato e reso pi` u qualificate le applicazioni in questa disciplina della matematica cosiddetta discreta, la quale si occupa, ad esempio, di enumerare configurazioni di simboli od oggetti, di costruire enti complicati a partire da altri pi` u semplici, ecc. Questa disciplina, che ha tra i suoi strumenti essenziali l’algebra e la teoria dei numeri, si presta in modo naturale allo studio del linguaggio proprio dei calcolatori, che ha, per sua stessa natura, una struttura discreta e non continua, ed interviene nella costruzione di tutti i sistemi di sicurezza legati alla trasmissione di dati. Dunque, anche se non ne siamo del tutto consapevoli, quando usiamo carte di credito, conti on–line e posta elettronica, adoperiamo a piene mani l’algebra e i numeri. Ma non basta: queste stesse tecniche hanno trovato applicazioni, gi` a a partire dagli anni ’40, alla trasmissione di dati su canali disturbati. Questo `e l’oggetto della teoria dei codici correttori di errori, che, anche se inconsapevolmente, usiamo in mille aspetti della nostra vita quotidiana, ad esempio quando ascoltiamo un brano di musica registrato su un CD o quando navighiamo in Internet. Il presente testo nasce dall’esperienza didattica dei tre autori presso l’Universit` a degli Studi di Roma “Tor Vergata” dove negli anni trascorsi essi hanno insegnato, presso vari corsi di laurea (Matematica, Informatica, Ingegneria Elettronica o Informatica) e nell’ambito della Scuola di Insegnamento a Distanza, ed a vari livelli (laurea quadriennale, laurea triennale, laurea specialistica), corsi di matematica con prevalente contenuto algebrico o geometrico, avendo di mira di presentare gli aspetti algoritmici e costruttivi delle teorie e di introdurre gli allievi alle applicazioni di cui abbiamo parlato dianzi. Il punto di vista preso in questo testo `e quello di tenere un profilo amichevole ed elementare. Cerchiamo di spiegare quel che intendiamo con questi due termini.

Introduzione

VII

Col termine amichevole intendiamo dire che abbiamo cercato sempre di motivare, con esempi che riteniamo semplici, significativi, talvolta divertenti e utili nelle applicazioni, gli sviluppi teorici proposti al Lettore. Abbiamo spesso illustrato, partendo dagli esempi, metodi generali di risoluzione di problemi aventi lo stesso nucleo teorico e che solo ad una prima visione superficiale appaiano in forme, ambiti e linguaggi diversi. In questo ordine di idee abbiamo puntato a tenere uno stile, che, pur nel rispetto del rigore formale necessario in una esposizione matematica, fosse semplice e colloquiale. Col termine elementare intendiamo che abbiamo presupposto nei nostri Lettori un bagaglio, sebbene non nullo, tuttavia non particolarmente vasto di conoscenze matematiche di base. In prima approssimazione, uno studente con alle spalle un buon primo semestre di un corso di laurea in Matematica, Fisica, Informatica o Ingegneria pu` o avventurarsi senza troppi problemi nella lettura di questo libro. In ogni caso abbiamo inteso rendere il pi` u possibile autosufficiente la trattazione per quel che concerne le nozioni di algebra e teoria dei numeri adoperate nelle applicazioni in crittografia e teoria dei codici. Elementare tuttavia non vuol dire facile, nel senso che abbiamo invece cercato di introdurre concetti anche alquanto avanzati, ma l’abbiamo fatto gradualmente e cercando sempre di portare il Lettore per mano, senza presupporre in lui conoscenze avanzate. Il punto di partenza del testo `e l’insieme ben noto dei numeri naturali ed interi e la loro aritmetica, ossia lo studio delle operazioni di addizione e moltiplicazione. Il Capitolo 1 `e dedicato a familiarizzare il Lettore con i numeri interi. Si parla qui del principio di induzione e di ricorsivit` a, dando applicazioni a vari problemi concreti, come l’analisi di dinamiche di popolazioni con date regole di riproduzione, il calcolo del numero di mosse in diversi giochi, ecc. Si parla poi di divisioni, di massimo comun divisore, e del ben noto algoritmo di Euclide per il suo calcolo, della risoluzione di equazioni diofantee di primo grado, di numerazione in basi diverse. Si tratta di nozioni basilari, che vengono qui presentate dapprima in modo elementare per poi fornirne una prospettiva teorica pi` u generale, con l’introduzione del concetto di anello euclideo. L’ultima parte del capitolo `e dedicata alle frazioni continue. Uno degli scopi del Capitolo 1 `e quello di mostrare come, per risolvere con metodi matematici dei problemi concreti, il primo passo sia quello di costruirne un modello matematico, che ne consenta la traduzione in uno o pi` u problemi matematici. Il passo successivo `e l’individuazione di algoritmi , cio`e di procedure che consistono nell’eseguire una successione finita di operazioni elementari, che permettano di risolvere i problemi matematici nei quali abbiamo tradotto l’iniziale questione. Nel Capitolo 2 viene discusso il concetto fondamentale di complessit` a computazionale di un algoritmo, che essenzialmente conta il numero di operazioni elementari di cui un algoritmo consiste e dunque valuta il tempo occorrente per eseguirlo. L’importanza di questo concetto `e evidente: tra gli algoritmi vanno distinti quelli praticabili, ossia eseguibili in tempi sufficientemente rapidi, e quelli impraticabili, in quanto il tempo occorrente per eseguirli `e troppo lungo indipendentemente dalla potenza dello strumento di

VIII

Introduzione

calcolo usato. Gli algoritmi del primo tipo sono quelli polinomiali , quelli del secondo, ad esempio, gli esponenziali . Viene quindi calcolata la complessit` a di alcuni algoritmi basilari per effettuare operazioni elementari con i numeri interi. Nel Capitolo 3 viene motivata ed introdotta, discutendo molti esempi, la nozione di congruenza, che permette di passare dall’insieme infinito dei numeri interi all’insieme finito delle classi resto. Questo passaggio dall’infinito al finito consente di programmare al calcolatore le operazioni elementari: il calcolatore infatti pu` o lavorare solo con un numero finito di dati. Il Capitolo 4 `e dedicato al problema basilare della fattorizzazione dei numeri interi. Si parla cio`e dei numeri primi, che sono i mattoni costitutivi dell’edificio dei numeri interi, nel senso che ogni numero intero `e rappresentabile come prodotto di numeri primi: questa `e la cosiddetta fattorizzazione di un numero intero. Un problema apparentemente innocuo dal punto di vista teorico `e quello di fattorizzare un numero intero: la fattorizzazione esiste ed `e essenzialmente unica e si trova col famoso crivello di Eratostene. Tuttavia viene mostrata l’impraticabilit` a di questo algoritmo esponenziale. Ad esempio nel 1979 `e stato provato che il numero 244497 − 1 con 13395 cifre decimali `e primo: se ci si fosse serviti del crivello di Eratostene, un computer che facesse un milione di moltiplicazioni al secondo avrebbe impiegato circa 106684 anni per ottenere questo risultato! Sulla difficolt` a di fattorizzare un numero intero si basa, in buona sostanza, la moderna crittografia a chiave pubblica, di cui al Capitolo 7. Nel Capitolo 4 trova posto anche la teoria generale degli anelli fattoriali, applicata in particolare al caso dei polinomi. Nel Capitolo 5 vengono introdotti i campi finiti, che sono una estensione degli anelli delle classi resto di interi modulo un numero primo. I campi finiti sono essenziali per le successive applicazioni alla crittografia e ai codici. Ne vengono qui studiate le propriet` a essenziali, illustrate da esempi significativi. Un’applicazione dei campi finiti viene fatta alla risoluzione di equazioni diofantee polinomiali. In particolare viene dimostrata la legge di reciprocit` a quadratica che `e la chiave per la risoluzione di congruenze di secondo grado. Nel successivo Capitolo 6 trova applicazione molta della teoria svolta con la determinazione di test di primalit` a , cio`e di algoritmi che consentano di determinare se un numero `e o meno primo, e di metodi di fattorizzazione pi` u raffinati del crivello di Eratostene che, pur essendo in generale esponenziali come quest’ultimo, in alcune situazioni particolari possono risultare molto efficienti. In particolare vengono presentati alcuni test di primalit` a di tipo probabilistico: essi sono in grado di dirci in un tempo assai breve se un numero ha probabilit` a molto alta di essere un numero primo. Inoltre viene qui dimostrato un recente test di primalit` a polinomiale di M. Agrawal, N. Kayal e N. Saxena, la cui dimostrazione ha suscitato notevole interesse tra gli esperti. Il Capitolo 7 contiene le applicazioni alla crittografia. Vengono dapprima esaminati vari metodi classici di crittografia, e si discute l’impostazione generale di un sistema crittografico ponendo altres`ı il problema della crittoanalisi, che studia le tecniche per eludere un tale sistema. Viene poi introdotto il ri-

Introduzione

IX

voluzionario concetto di crittografia a chiave pubblica, sul quale si basa la trasmissione di tutta la massa di informazioni riservate tipica delle attivit` a della nostra societ`a telematica. Vengono discussi vari cifrari a chiave pubblica, tra cui il famoso sistema RSA, la cui sicurezza si basa sulla difficolt` a computazionale di fattorizzare numeri grandi, e alcune sue varianti che consentono ad esempio l’introduzione della autentica elettronica della firma. Recentemente nuove frontiere si sono aperte per la crittografia, con speciale riguardo alla sicurezza, a seguito dell’interazione dell’algebra e dell’aritmetica classiche con idee e concetti che provengono dalla geometria algebrica, pi` u precisamente dallo studio di certe curve piane dette curve ellittiche. Una introduzione a questi importanti sviluppi viene fornita alla fine del capitolo. Il Capitolo 8 `e dedicato a dare una visione introduttiva della teoria dei codici a blocchi, cui abbiamo gi` a accennato dianzi. Si tratta di un campo della matematica di recente sviluppo nel quale convergono raffinate tecniche combinatoriche, algebriche e geometriche, allo scopo di studiare gli aspetti matematici del problema della trasmissione di dati attraverso canali disturbati. In altre parole, la teoria dei codici si occupa di elaborare tecniche che permettano di trasmettere dati utilizzando un canale per il quale si d` a per certo che avvenga nel corso della trasmissione un certo numero di errori. Tali tecniche consentono di correggere gli errori commessi, oltre a permettere di codificare e decodificare in tempi rapidi i dati che vogliamo inoltrare. Nel Capitolo 9 si getta un rapido sguardo verso la nuova frontiera della crittografia quantistica, che si basa su idee che hanno origine dalla fisica quantistica. Quest’ultima disciplina rende plausibile, almeno da un punto di vista teorico, la creazione di un computer quantistico, che, se realizzato in pratica, sarebbe in grado di effettuare in tempo polinomiale calcoli svolti da un computer classico in tempo esponenziale. Ci` o renderebbe vulnerabile ogni attuale sistema crittografico mettendo in serio pericolo sistemi di sicurezza civili, militari, bancari ecc. Il risultato potrebbe essere il collasso della nostra stessa civilt` a, in gran parte basata su tali sistemi. D’altro canto, le stesse idee su cui poggia il concetto di computer quantistico portano a concepire e realizzare sistemi crittografici quantistici assolutamente inattaccabili, anche da un eventuale computer quantistico, e aventi inoltre la sorprendente capacit` a di scoprire se eventuali malintenzionati hanno solo tentato, anche senza riuscirvi, di intromettersi abusivamente in una comunicazione riservata. Ogni capitolo `e corredato di un’appendice che contiene: • una lista di esercizi di natura teorica di varia difficolt` a, in alcuni dei quali vengono proposte dimostrazioni di teoremi complementari a quelli dati nel testo o dimostrazioni alternative di qualche teorema che gi` a si trova nel testo; • una lista di esercizi di natura pi` u prettamente computazionale; • proposte per esercizi di programmazione.

X

Introduzione

Gli esercizi pi` u difficili sono contrassegnati da un asterisco. Alla fine del volume si trova la risposta a parecchi degli esercizi proposti, specie a quelli di natura teorica pi` u complicati. I vari capitoli contengono alcune parti la cui lettura non `e essenziale in prima istanza. Esse si presentano, da un punto di vista tipografico, in carattere pi` u piccolo, cos`ı come le appendici. Il testo `e rivolto a studenti dei corsi di laurea in Matematica, Fisica, Informatica, Ingegneria, nonch´e a studiosi che intendano avvicinarsi, senza entrare in dettagli specialistici, ai concetti che abbiamo dianzi rapidamente illustrato. In particolare, il libro pu` o risultare utile come testo complementare per gli studenti del primo–secondo anno del corso di laurea in Matematica, Fisica o Informatica, che seguano un corso di Algebra o Matematica Discreta. Nei capitoli 1, 3, 4, essi potranno trovare un approccio concreto, corredato di molti esempi ed esercizi, ad alcune teorie algebriche di base. I capitoli 5 e 6, bench´e pi` u avanzati, sono a nostro avviso alla portata di un Lettore di questa categoria. Il testo si presta in modo particolare per un corso di introduzione alla crittografia e/o ai codici, che si collochi al secondo–terzo anno della laurea triennale o al primo della laurea specialistica. Gli studenti di un tale corso saranno probabilmente gi` a stati introdotti al contenuto dei capitoli 1, 3, 4, che potranno dunque essere in gran parte dati per buoni, facendone oggetto solo di rapidi richiami e invitando gli studenti a risolvere qualche esercizio. Ci si potr` a poi concentrare sui capitoli dal 5 in poi, in particolare sul Capitolo 7, dedicando ai capitoli 8 e 9 pi` u o meno tempo a seconda dei casi. Per ulteriori approfondimenti su crittografia e codici, necessari per corsi di natura pi` u specialistica, ci si potr` a riferire ai testi via via indicati in bibliografia. Una prima versione a stampa di questo testo `e apparso nel 2002 con il titolo “Note di matematica discreta”, edito da Aracne, i cui responsabili ringraziamo vivamente per aver consentito la pubblicazione del presente volume. Rispetto a “Note di matematica discreta”, questa edizione `e profondamente cambiata per la collocazione del materiale, per l’aggiunta di parecchie parti nuove e di molti approfondimenti, per la presenza di una pi` u ampia scelta di esercizi con relative risoluzioni. Ringraziamo infine il dott. Alberto Calabri che ha curato la veste grafica del volume e la revisione del testo con particolare riferimento alle appendici contenenti gli esercizi.

Roma, Febbraio 2006

Welleda Baldoni Ciro Ciliberto Giulia Maria Piacentini Cattaneo

Indice

1

Qualche richiamo sui numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Principio di induzione completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Il concetto di ricorsivit` a .................................. 1.2.1 I numeri di Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Altri esempi di dinamica di popolazioni . . . . . . . . . . . . . . . 1.2.3 La torre di Hanoi: un caso lineare non omogeneo . . . . . . . 1.3 L’algoritmo di Euclide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 La divisione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Il massimo comun divisore . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 L’identit` a di B´ezout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 Equazioni lineari diofantee . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Anelli euclidei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.6 Polinomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Contare in basi diverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 La rappresentazione posizionale dei numeri . . . . . . . . . . . . 1.4.2 La base 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.3 Le quattro operazioni in base 2 . . . . . . . . . . . . . . . . . . . . . . 1.4.4 Numeri interi in base qualunque . . . . . . . . . . . . . . . . . . . . . 1.4.5 Rappresentazione dei numeri reali in base qualunque . . . 1.5 Frazioni continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.1 Frazioni continue semplici finite e numeri razionali . . . . . 1.5.2 Frazioni continue semplici infinite e numeri irrazionali . . 1.5.3 Frazioni continue periodiche . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.4 Modello geometrico delle frazioni continue . . . . . . . . . . . . 1.5.5 L’approssimazione di irrazionali mediante i convergenti . 1.5.6 Frazioni continue ed equazioni diofantee . . . . . . . . . . . . . . Appendice al Capitolo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A1 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B1 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . C1 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 1 5 6 11 13 14 14 16 17 20 21 23 30 30 32 33 39 40 43 45 48 56 57 58 61 62 62 73 83

XII

Indice

2

Complessit` a computazionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 2.1 Il concetto di complessit` a computazionale . . . . . . . . . . . . . . . . . . . 85 2.2 Il simbolo O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 2.3 Tempo polinomiale, tempo esponenziale . . . . . . . . . . . . . . . . . . . . 90 2.4 Complessit` a delle operazioni elementari . . . . . . . . . . . . . . . . . . . . . 93 2.5 Algoritmi e complessit`a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 2.5.1 Complessit`a dell’algoritmo di Euclide . . . . . . . . . . . . . . . . . 95 2.5.2 Dalla scrittura binaria a quella decimale: complessit` a . . . 99 2.5.3 Complessit`a delle operazioni tra polinomi . . . . . . . . . . . . . 99 2.5.4 Un algoritmo pi` u efficiente per la moltiplicazione . . . . . . . 101 2.5.5 Metodo di Ruffini–Horner . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Appendice al Capitolo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 A2 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 B2 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 106 C2 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

3

Dall’infinito al finito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 3.1 Congruenze: prime propriet` a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 3.2 Prime applicazioni delle congruenze . . . . . . . . . . . . . . . . . . . . . . . . 116 3.2.1 La prova del nove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 3.2.2 Criteri di divisibilit` a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 3.3 Congruenze lineari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 3.3.1 Potenze modulo n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 3.4 Il Teorema cinese dei resti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 3.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 3.5.1 Il calendario perpetuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 3.5.2 Girone all’italiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Appendice al Capitolo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 A3 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 B3 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 136 C3 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

4

Finito non basta: fattorizzazione di interi . . . . . . . . . . . . . . . . . . 145 4.1 Numeri primi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 4.1.1 Il Teorema Fondamentale dell’Aritmetica . . . . . . . . . . . . . 146 4.1.2 Distribuzione dei numeri primi . . . . . . . . . . . . . . . . . . . . . . 148 4.1.3 Il crivello di Eratostene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 4.2 Numeri primi e congruenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 4.2.1 Il calcolo della funzione di Eulero . . . . . . . . . . . . . . . . . . . . 156 4.2.2 Il Piccolo Teorema di Fermat . . . . . . . . . . . . . . . . . . . . . . . . 158 4.2.3 Il teorema di Wilson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 4.3 Rappresentazione in base qualunque dei numeri razionali . . . . . . 162 4.4 Primi di Fermat, primi di Mersenne e numeri perfetti . . . . . . . . . 164 4.4.1 Fattorizzazione di interi della forma bn ± 1 . . . . . . . . . . . . 164 4.4.2 Numeri primi di Fermat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Indice

XIII

4.4.3 Numeri primi di Mersenne . . . . . . . . . . . . . . . . . . . . . . . . . . 168 4.4.4 Numeri perfetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 4.5 Fattorizzazione in un dominio di integrit` a . . . . . . . . . . . . . . . . . . . 169 4.5.1 Elementi primi e irriducibili in un anello . . . . . . . . . . . . . . 170 4.5.2 Domini fattoriali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 4.5.3 Anelli noetheriani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 4.5.4 Fattorizzazione di polinomi su un campo . . . . . . . . . . . . . . 175 4.5.5 Fattorizzazione di polinomi su un anello fattoriale . . . . . . 177 4.5.6 Polinomi a coefficienti razionali o interi . . . . . . . . . . . . . . . 183 4.6 L’interpolazione di Lagrange e applicazioni . . . . . . . . . . . . . . . . . . 186 4.7 Il metodo di fattorizzazione di Kronecker . . . . . . . . . . . . . . . . . . . 191 Appendice al Capitolo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 A4 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 B4 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 200 C4 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 5

Campi finiti e congruenze polinomiali . . . . . . . . . . . . . . . . . . . . . . 209 5.1 Un po’ di teoria dei campi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 5.1.1 Estensioni di campi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 5.1.2 Estensioni algebriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5.1.3 Campo di riducibilit` a completa di un polinomio . . . . . . . 213 5.1.4 Radici dell’unit` a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 5.1.5 Chiusura algebrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.1.6 Campi finiti e loro sottocampi . . . . . . . . . . . . . . . . . . . . . . . 216 5.1.7 Automorfismi dei campi finiti . . . . . . . . . . . . . . . . . . . . . . . . 218 5.1.8 Polinomi irriducibili su Zp . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.1.9 Campo F4 di ordine quattro . . . . . . . . . . . . . . . . . . . . . . . . . 219 5.1.10 Campo F8 di ordine otto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 5.1.11 Campo F16 di ordine sedici . . . . . . . . . . . . . . . . . . . . . . . . . . 221 5.1.12 Campo F9 di ordine nove . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 5.1.13 Sui generatori di un campo finito . . . . . . . . . . . . . . . . . . . . 223 5.1.14 Complessit`a del calcolo in un campo finito . . . . . . . . . . . . 223 5.2 Congruenze polinomiali non lineari . . . . . . . . . . . . . . . . . . . . . . . . . 224 5.2.1 Equazioni di secondo grado . . . . . . . . . . . . . . . . . . . . . . . . . 230 5.2.2 Residui quadratici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 5.2.3 Il simbolo di Legendre e sue propriet` a . . . . . . . . . . . . . . . . 233 5.2.4 La legge di reciprocit`a quadratica . . . . . . . . . . . . . . . . . . . . 238 5.2.5 Il simbolo di Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 5.2.6 Un algoritmo per il calcolo delle radici quadrate . . . . . . . 244 Appendice al Capitolo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 A5 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 B5 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 250 C5 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

XIV

Indice

6

Test di primalit` a e di fattorizzazione . . . . . . . . . . . . . . . . . . . . . . . 257 6.1 Numeri pseudoprimi e test probabilistici . . . . . . . . . . . . . . . . . . . . 257 6.1.1 Numeri pseudoprimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 6.1.2 Test probabilistici e test deterministici . . . . . . . . . . . . . . . . 258 6.1.3 Un primo test di primalit` a probabilistico . . . . . . . . . . . . . . 259 6.1.4 Numeri di Carmichael . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 6.1.5 Pseudoprimi di Eulero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 6.1.6 Il test probabilistico di primalit` a di Solovay–Strassen . . . 264 6.1.7 Pseudoprimi forti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 6.1.8 Test probabilistico di primalit` a di Miller–Rabin . . . . . . . . 268 6.2 Radici primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 6.2.1 Radici primitive e indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 6.2.2 Ancora sul test di Miller–Rabin . . . . . . . . . . . . . . . . . . . . . . 275 6.3 Un test di primalit` a deterministico polinomiale . . . . . . . . . . . . . . 277 6.4 Metodi di fattorizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 6.4.1 Il metodo di fattorizzazione di Fermat . . . . . . . . . . . . . . . . 287 6.4.2 Generalizzazione del metodo fattorizzazione di Fermat . . 289 6.4.3 Il metodo delle basi di fattorizzazione . . . . . . . . . . . . . . . . 290 6.4.4 Fattorizzazione e frazioni continue . . . . . . . . . . . . . . . . . . . 295 6.4.5 L’algoritmo del crivello quadratico . . . . . . . . . . . . . . . . . . . 296 6.4.6 Il metodo ρ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 6.4.7 Variazione del metodo ρ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Appendice al Capitolo 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 A6 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 B6 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 310 C6 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

7

Segreti. . . e bugie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 7.1 I cifrari classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 7.1.1 Le prime scritture segrete nella storia . . . . . . . . . . . . . . . . . 315 7.2 L’analisi del testo cifrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 7.2.1 Macchinari per cifrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 7.3 Impostazione matematica di un crittosistema . . . . . . . . . . . . . . . . 327 7.4 Alcuni cifrari classici basati sull’aritmetica modulare . . . . . . . . . 331 7.4.1 Cifrari affini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 7.4.2 Cifrari con matrici o di Hill . . . . . . . . . . . . . . . . . . . . . . . . . 336 7.5 L’idea di base della crittografia a chiave pubblica . . . . . . . . . . . . 338 7.5.1 Un algoritmo per il calcolo dei logaritmi discreti . . . . . . . 341 7.6 Problema dello zaino e applicazioni alla crittografia . . . . . . . . . . 342 7.6.1 Cifrario a chiave pubblica basato sul problema dello zaino o di Merkle–Hellman . . . . . . . . . . . . . . . . . . . . . . . . . . 345 7.7 Il sistema RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 7.7.1 Accesso al sistema RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 7.7.2 Invio di un messaggio cifrato con il sistema RSA . . . . . . . 349 7.7.3 Decifratura di un messaggio cifrato con il sistema RSA . 351

Indice

XV

7.7.4 Perch´e ha funzionato? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 7.7.5 Autenticazione delle firme con il sistema RSA . . . . . . . . . 357 7.7.6 Un commento sulla sicurezza del sistema RSA . . . . . . . . . 359 7.8 Varianti del sistema RSA e oltre . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 7.8.1 Scambio di chiavi private . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 7.8.2 Il crittosistema di Elgamal . . . . . . . . . . . . . . . . . . . . . . . . . . 361 7.8.3 Zero-knowledge proof: convincere che si conosce un risultato senza svelarne il contenuto o la dimostrazione . 362 7.8.4 Nota storica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 7.9 Crittografia e curve ellittiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 7.9.1 Crittografia in un gruppo . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 7.9.2 Curve algebriche in un piano affine numerico . . . . . . . . . . 365 7.9.3 Rette e curve razionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 7.9.4 Curve iperellittiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 7.9.5 Curve ellittiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 7.9.6 Legge di gruppo sulle curve ellittiche . . . . . . . . . . . . . . . . . 371 7.9.7 Curve ellittiche su R, C e Q . . . . . . . . . . . . . . . . . . . . . . . . . 377 7.9.8 Curve ellittiche su campi finiti . . . . . . . . . . . . . . . . . . . . . . . 378 7.9.9 Curve ellittiche e crittografia . . . . . . . . . . . . . . . . . . . . . . . . 381 7.9.10 Il metodo di fattorizzazione p − 1 di Pollard . . . . . . . . . . . 382 Appendice al Capitolo 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 A7 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 B7 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 388 C7 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 8

Trasmettere senza. . . paura di sbagliare . . . . . . . . . . . . . . . . . . . . 401 8.1 Auguri di buon compleanno! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 8.2 Fotografando nello spazio o lanciando monete, arriviamo ai codici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 8.3 Codici che correggono gli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 8.4 Limitazioni sugli invarianti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 8.5 Codici lineari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 8.6 Codici ciclici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 8.7 Codici di Goppa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 Appendice al Capitolo 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 A8 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 B8 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 437 C8 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

9

Il futuro ` e gi` a presente: la crittografia quantistica . . . . . . . . . . 441 9.1 Una prima incursione nel mondo quantistico: l’esperimento di Young . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 9.2 Il computer quantistico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 9.3 Il cifrario di Vernam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 9.4 Un breve glossario di meccanica quantistica . . . . . . . . . . . . . . . . . 451

XVI

Indice

9.5 Crittografia quantistica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Appendice al Capitolo 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 A9 Esercizi di carattere teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 B9 Esercizi di carattere computazionale . . . . . . . . . . . . . . . . . . . . . . . . 465 C9 Esercizi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 10 Soluzione di alcuni esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 10.1 Esercizi del Capitolo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 10.2 Esercizi del Capitolo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 10.3 Esercizi del Capitolo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 10.4 Esercizi del Capitolo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 10.5 Esercizi del Capitolo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 10.6 Esercizi del Capitolo 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 10.7 Esercizi del Capitolo 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 10.8 Esercizi del Capitolo 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 10.9 Esercizi del Capitolo 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Riferimenti bibliografici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 Indice analitico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

1 Qualche richiamo sui numeri

Questo capitolo `e dedicato ad alcuni richiami sui numeri, che ci saranno utili in seguito e che valgono intanto a fissare l’attenzione su qualche idea o tecnica oggetto di approfondimenti successivi. Sebbene riprenderemo alcuni concetti, riterremo tuttavia note, qui e in seguito, le seguenti nozioni: • elementi di teoria degli insiemi e di logica (cfr. ad esempio [40]); • costruzione degli insiemi numerici fondamentali: N = insieme dei numeri naturali, Z = insieme dei numeri interi, Q = insieme dei numeri razionali, R = insieme dei numeri reali, C = insieme dei numeri complessi, e delle operazioni in essi definite (cfr. [15] oppure [22]); • concetto di limite e di serie numeriche (contenute in ogni testo di base di Analisi Matematica, ad esempio cfr. [12]); • fondamenti di algebra (cfr. [4], [15], [30] oppure [42]). In particolare le definizioni delle strutture algebriche basilari quali semigruppi, gruppi, anelli, domini di integrit` a, campi ; • nozioni di base di algebra lineare (cfr. [13]): spazi vettoriali, matrici, autovalori e autovettori; • i primi concetti elementari di calcolo delle probabilit` a (cfr. [5] o [29]).

1.1 Principio di induzione completa In questo paragrafo cominciamo col fissare la nostra attenzione sull’insieme N = {0, 1, 2, 3, . . .} dei numeri naturali, dotato, come `e ben noto, delle operazioni + di addizione e · di moltiplicazione e di una relazione d’ordine naturale

2

1 Qualche richiamo sui numeri

≤. Ricordiamo che sia (N, +) sia (N, ·) sono semigruppi, ossia le operazioni sono associative con elemento neutro. Nell’insieme N `e definita l’applicazione succ : n ∈ N → n + 1 ∈ N che associa ad ogni numero naturale il suo successivo. Questa applicazione `e iniettiva, ma non suriettiva, in quanto 0 non `e il successivo di alcun numero naturale. L’esistenza di una siffatta applicazione, iniettiva ma non suriettiva, di N implica che N `e un insieme infinito. Inoltre in N vale la seguente propriet`a fondamentale: Principio di induzione completa (PI). Sia A un sottoinsieme di N che soddisfa le seguenti due propriet` a: (1) n0 ∈ A; (2) se n ∈ A, allora anche succ(n) = n + 1 ∈ A, per ogni n. Allora A contiene tutti i numeri naturali maggiori di n0 . In particolare, se n0 = 0, allora A coincide con N. Come `e ben noto, l’esistenza dell’applicazione succ e il principio di induzione completa determinano, in modo essenzialmente unico, l’insieme dei numeri naturali. Il principio di induzione completa, detto anche principio di induzione matematica o semplicemente principio di induzione, non `e solo importante per la costruzione formale dell’insieme N, ma `e anche un essenziale strumento tecnico dimostrativo sul quale vogliamo qui richiamare l’attenzione del Lettore. Facciamo un semplice esempio. Supponiamo di volere risolvere il seguente problema: calcolare la somma dei primi n numeri naturali, cio`e calcolare il numero 1 + 2 + · · · + (n − 1) + n. Alcuni dei Lettori forse sanno che questo problema, anche se solo nel caso particolare n = 100, fu assegnato dal maestro di scuola del piccolo K. F. Gauss, quando questi aveva solo sei anni, alla scolaresca turbolenta, nella speranza che gli allievi impiegassero parecchio tempo a risolverlo e nel frattempo stessero un po’ tranquilli. Purtroppo per il maestro, Gauss osserv` o che n + 1 = (n − 1) + 2 = (n − 2) + 3 = · · · , cio`e che la somma dell’ultimo termine pi` u il primo uguaglia la somma del penultimo pi` u il secondo e cos`ı via, indovinando in pochi secondi la formula generale n(n + 1) (1.1) 1 + 2 + · · · + (n − 1) + n = 2 e ottenendo perci` o subito 1 + 2 + · · · + 99 + 100 = 5050.

1.1 Principio di induzione completa

3

Ma come fare a dimostrare, che, come intu`ı il piccolo Gauss, vale la formula (1.1)? Chiaramente non `e possibile verificarla per ogni n facendo effettivamente i conti, perch´e si dovrebbero effettuare un numero infinito di verifiche. Il principio di induzione permette proprio di risolvere, in contesti anche pi` u generali, problemi di questo tipo. Consideriamo un insieme qualunque X e una successione {Pn } di proposizioni definite in X, cio`e per ogni numero n ∈ N sia data una proposizione Pn che riguarda gli elementi di X. Ad esempio, nel caso X = N, si pu` o considerare Pn = vale la formula (1.1), ossia Pn `e l’asserzione che per il numero n ∈ N la somma 1+2+· · ·+(n−1)+n vale n(n + 1)/2. Supponiamo di voler provare che la proposizione Pn `e vera per ogni n. Si tratta di dimostrare infinite proposizioni. Consideriamo l’insieme A := {n ∈ N | Pn `e vera}. Dobbiamo provare che A coincide con N. Per il principio di induzione basta procedere come segue: (1) base dell’induzione: dimostrare che `e vera P0 ; (2) passo induttivo: dimostrare che, per ogni k ≥ 0, dall’essere vera Pk (ipotesi induttiva), segue che `e vera Pk+1 . Allora si pu` o concludere che Pn `e vera per ogni n ∈ N.

Il metodo di dimostrazione per induzione permette quindi di ottenere infiniti risultati con due soli passi. In questo senso si tratta di un procedimento di riduzione dall’infinito al finito che `e assolutamente essenziale in quanto l’infinito `e di per s´e intrattabile. In seguito vedremo diversi metodi, tecniche e idee che rispondono alla stessa esigenza di riduzione dall’infinito al finito. Una formulazione, apparentemente pi` u restrittiva, ma in realt` a del tutto equivalente (cfr. Esercizi A1.1–A1.3), dello stesso principio, `e la seguente: Principio di induzione generalizzata (PIG). Sia A un sottoinsieme di N che soddisfa le seguenti due propriet` a: (1) n0 ∈ A; (2) se k ∈ A per ogni k tale che n0 ≤ k < n, allora anche n ∈ A. Allora A contiene tutti i numeri naturali maggiori di n0 . In particolare, se n0 = 0, allora A coincide con N. Questo porta, analogamente a prima, alla seguente formulazione: (1) base dell’induzione: dimostrare che `e vera P0 ; (2) passo induttivo: dimostrare che, per ogni k ≥ 0, dall’essere vera Ph per ogni h ≤ k, segue che `e vera Pk+1 . Allora si pu` o concludere che Pn `e vera per ogni n ∈ N.

4

1 Qualche richiamo sui numeri

Una importante avvertenza, implicitamente contenuta nelle precedenti considerazioni, `e che il principio di induzione, di per s´e, non fornisce formule, ma permette di dimostrarle se gi` a le conosciamo. In altri termini se gi` a possediamo la successione di proposizioni Pn possiamo sperare di dimostrarne la validit` a tramite il principio di induzione, ma quest’ultimo non ci fornisce certo la successione Pn . Nella prassi, dato un determinato problema come quello posto al piccolo Gauss, per indovinare la giusta successione di proposizioni Pn occorre esaminare i casi relativi a valori bassi di n e, imitando Gauss, intuire qual `e la trama generale. A titolo di esempio dimostriamo per induzione la formula (1.1). La base dell’induzione consiste nell’osservare che la formula `e ovviamente vera per n = 1. Supponiamo ora la formula vera per un dato valore di n e dimostriamola per il valore successivo n + 1. Abbiamo: 1 + 2 + · · · + (n − 1) + n + (n + 1) =

= [1 + 2 + · · · + (n − 1) + n] + (n + 1) =

=

(per ipotesi induttiva)

(n + 1)(n + 2) n(n + 1) + (n + 1) = . 2 2

Ci`o dimostra il passo induttivo per ogni n, e quindi dimostra la (1.1). Altri esempi di utilizzazione del principio di induzione per provare formule simili alla (1.1) si trovano suggeriti nell’appendice a questo capitolo (cfr. Esercizi B1.5–B1.11). Osservazione 1.1.1. Prima di procedere oltre `e bene avvertire i Lettori delle insidie che errate applicazioni del principio di induzione possono creare. Nella dimostrazione per induzione, entrambi i passi, base dell’induzione e passo induttivo, sono indispensabili per una corretta applicazione del principio, ed entrambi vanno eseguiti rigorosamente. Altrimenti si rischia di incorrere in grossolani errori. Ad esempio un’errata applicazione del principio di induzione pu` o portare a dimostrare la seguente paradossale affermazione: Tutti i gatti sono dello stesso colore. Procediamo per induzione dimostrando che per ogni n ∈ N, ogni insieme di n gatti `e formato di gatti dello stesso colore: • •

base dell’induzione: `e ovvia, infatti ogni insieme costituito da un solo gatto `e formato di gatti dello stesso colore: il colore dell’unico gatto nell’insieme in questione; passo induttivo: supponiamo che, ogni qualvolta abbiamo n − 1 gatti, questi siano dello stesso colore e dimostriamo che la stessa affermazione `e vera se ci sono n gatti. Osserviamo la seguente figura dove i pallini indicano gatti: n−1

   • • • • • · ·· • • • • • .

(1.2)

n−1

Per l’ipotesi induttiva, i primi n − 1 gatti sono tutti dello stesso colore. Per la stessa ragione, anche gli ultimi n − 1 gatti hanno tutti il medesimo colore, a priori differente da quello dei precedenti. Ma i gatti in comune, cio`e quelli che stanno sia tra i primi n − 1 sia tra gli ultimi n − 1, devono avere lo stesso unico colore, quindi tutti gli n gatti hanno lo stesso colore.

1.2 Il concetto di ricorsivit` a

5

Poich´e, per fortuna, ci sono gatti di colore diverso, abbiamo di sicuro commesso un errore. Dove abbiamo sbagliato? Nel passo induttivo abbiamo usato il fatto che ci sono dei gatti in comune tra i due insiemi considerati, cio`e tra i primi n − 1 gatti e gli ultimi n − 1. Ma questo `e vero solo se n ≥ 3. In sostanza il passo induttivo non vale per ogni n, perch´e non vale il passaggio da n = 1 a n = 2, come `e invece richiesto dal principio di induzione. Si noti che se vogliamo dimostrare una proposizione Pn non per tutti gli n, ma per tutti gli n ≥ n0 , basta provare come base dell’induzione la proposizione Pn0 e poi verificare il passo induttivo per ogni n ≥ n0 . Guardando di nuovo all’esempio dei gatti, il passo induttivo vale per n ≥ 2, ma la base dell’induzione non vale per n = 2, cio`e non `e vero che ogni coppia di gatti `e formata di gatti dello stesso colore!

1.2 Il concetto di ricorsivit` a Il concetto fondamentale di ricorsivit` a, che ora tratteremo, `e strettamente legato al principio di induzione. Supponiamo di avere una funzione definita sull’insieme N dei numeri naturali e a valori in un insieme X. Tale funzione si dice comunemente successione in X e si indica col simbolo {an }n∈N o semplicemente {an }, dove an `e il valore assunto dalla funzione sull’intero n. I valori an si dicono i termini della successione. Supponiamo ora di avere un metodo che ci permetta di determinare il termine an per un qualsiasi intero n maggiore o uguale di un certo intero n0 , una volta che sia noto il termine an−1 . Supponiamo inoltre di conoscere i valori iniziali della successione, cio`e a0 , a1 , a2 , . . ., an0 −1 , an0 . Noi affermiamo che, in queste condizioni, siamo in grado di calcolare il valore della successione per ogni numero naturale n. Questo `e una conseguenza del principio di induzione e se ne lascia la facile dimostrazione al Lettore (cfr. Esercizio A1.10). Un esempio particolare, ma, come vedremo, molto interessante, del suddetto procedimento `e dato da successioni numeriche che verificano relazioni ricorsive lineari . Diamo una definizione generale: Definizione 1.2.1. Sia {an }n∈N una successione di elementi di uno spazio vettoriale V su un campo K. Una relazione, o formula, ricorsiva lineare per la successione `e una formula del tipo an+k = fk−1 (an+k−1 ) + fk−2 (an+k−2 ) + · · · + f0 (an ) + dn ,

(1.3)

valida per ogni intero n ≥ 0, dove k `e un intero positivo, a0 , a1 , . . ., ak−1 sono i valori, o condizioni, iniziali, f0 , f1 , . . ., fk−1 sono applicazioni lineari di V in s´e dette coefficienti della relazione lineare, e {dn } `e una successione (eventualmente costante) di elementi di V detta termine noto. Se dn = 0, la relazione si dice omogenea. La formula (1.3) esprime dunque il termine (n + k)-esimo della successione u il caso {an } in funzione dei k termini precedenti. Noi considereremo per lo pi` in cui {dn } sia una successione costante uguale a d. Il termine lineare esprime

6

1 Qualche richiamo sui numeri

la circostanza che stiamo lavorando in uno spazio vettoriale V . In particolare si potranno considerare successioni {an }n∈N di elementi di K che verificano una relazione ricorsiva. In tal caso f0 , f1 , . . ., fk−1 risultano il prodotto per elementi b0 , b1 , . . ., bk−1 di K e la relazione (1.3) prende la forma an+k = bk−1 an+k−1 + bk−2 an+k−2 + · · · + b0 an + dn .

(1.4)

Si dice che la successione {an }n∈N `e una soluzione di una relazione lineare ricorsiva del tipo (1.3) se i termini an della successione soddisfano la relazione ` chiaro che la successione `e univocamente determinata dalla relazione stessa. E (1.3) e dai valori iniziali a0 , a1 , . . ., ak−1 . Viceversa, se sappiamo che una successione {an }n∈N di elementi del campo K verifica una relazione lineare ricorsiva del tipo (1.4), di cui per` o non conosciamo i coefficienti b0 , b1 , . . ., bk−1 e il termine noto costante d, allora si pu` o sperare di determinare questi ultimi, e quindi la successione, se si conosce un numero sufficientemente elevato di termini della successione (cfr. come caso particolare l’Esercizio A1.27). Relazioni ricorsive appaiono in modo naturale nello studio di una serie di problemi diversi, come calcolare discendenze o ascendenze di popolazioni con determinate regole di riproduzione, colorare disegni utilizzando solo due colori, calcolare il numero di mosse in diversi giochi, calcolare interessi composti, risolvere problemi geometrici, ecc. Alcuni di questi problemi verranno ora presentati come esempi ovvero assegnati come esercizi nell’appendice. 1.2.1 I numeri di Fibonacci Esempio 1.2.2. Una coppia di conigli neonati, maschio e femmina, viene lasciata su di un’isola deserta il 1o gennaio di un dato anno. Questa coppia impiega due mesi a maturare e, a partire dal 1o marzo, il primo giorno di ogni mese genera un’altra coppia di conigli, maschio e femmina. Ogni coppia di conigli neonati, maschio e femmina, impiega similmente due mesi a maturare e, a partire dal primo giorno del suo terzo mese di vita, il primo giorno di ogni mese genera un’altra coppia di conigli, maschio e femmina. Quante coppie di conigli sono presenti sull’isola dopo n mesi? Per rispondere alla domanda, dobbiamo elaborare un modello matematico per la crescita della popolazione di conigli descritta nell’esempio. Indichiamo con fn il numero di coppie di conigli, maschio e femmina, presenti sull’isola ` chiaro che fn `e somma di due quantit` a completamente al mese n-esimo. E determinate dalla situazione nei mesi precedenti, cio`e fn `e la somma (1) del numero fn−1 di coppie di conigli presenti nell’isola al mese (n − 1)esimo, perch´e nessun coniglio muore; (2) del numero di coppie di conigli nate nel primo giorno del mese n-esimo, che sono tante quante le coppie di conigli mature in quel giorno, le quali a loro volta sono tante quante le coppie fn−2 di conigli presenti sull’isola due mesi prima.

1.2 Il concetto di ricorsivit` a

7

Di conseguenza possiamo scrivere per la successione {fn }n∈N la seguente relazione ricorsiva: fn = fn−1 + fn−2 per ogni n ≥ 2 con le ovvie condizioni iniziali f0 = 0 e f1 = 1. La successione {fn } di numeri naturali soddisfacente la seguente relazione ricorsiva con le assegnate condizioni iniziali f0 = 0,

f1 = 1,

fn = fn−1 + fn−2

per n > 1,

(1.5)

prende il nome di successione di Fibonacci e i termini della successione si chiamano numeri di Fibonacci . Ogni termine della successione `e somma dei due termini precedenti e la conoscenza della successione di Fibonacci d` a risposta al problema posto nell’Esempio 1.2.2. I primi termini della successione sono facili da calcolare: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, . . . I numeri di Fibonacci non hanno solo a che fare con la crescita di popolazioni, ma si ritrovano spesso nella descrizione di vari fenomeni naturali. Ad esempio i girasoli contengono al loro interno delle spirali e generalmente hanno 34 avvitamenti in un senso e 55 in un altro. Se il girasole `e pi` u piccolo, avr` a invece 21 avvitamenti in un senso e 34 nell’altro, oppure 13 e 21. Se `e enorme avr` a 89 e 144 spirali! Come si vede i numeri che compaiono sono, non a caso, numeri di Fibonacci. I numeri di Fibonacci sono stati introdotti da Leonardo Fibonacci, o Leonardo Pisano, nel 1202, proprio con lo scopo di descrivere la crescita di una popolazione di conigli. Essi possiedono molte interessanti propriet` a matematiche, tanto che, nel corso dei secoli sono stati, e sono tuttora, oggetto di studio da parte di molti matematici. Ad esempio, alla fine del secolo scorso il matematico Edouard Lucas ha utilizzato alcune propriet` a dei numeri di Fibonacci per provare che il numero di 39 cifre 170141183460469231731687303715884105727 = 2127 − 1 `e un numero primo (cfr. Capitolo 4). Notiamo ora che scrivere la relazione (1.5) non `e del tutto soddisfacente ai fini della risoluzione del problema posto nell’Esempio 1.2.2. Vorremmo infatti individuare una soluzione della relazione ricorsiva (1.5), cio`e una formula chiusa che ci permetta di determinare il termine n-esimo della successione di Fibonacci, senza dover necessariamente calcolare tutti i termini precedenti. Per fare ci` o procederemo usando le operazioni con le matrici e qualche rudimento di algebra lineare. Consideriamo la matrice su R   0 1 . (1.6) A= 1 1

8

1 Qualche richiamo sui numeri

Possiamo riscrivere le condizioni (1.5) nel modo seguente:     fn−2 fn−1 = per ogni n ≥ 2, A fn−1 fn ossia, posto Xn =



 fn−1 , consideriamo il sistema lineare fn per ogni n ≥ 2,

AXn−1 = Xn , da cui si ottiene

An X0 = Xn . Dunque, se conosciamo An , per trovare la formula chiusa che esprime fn in termini delle condizioni iniziali baster` a moltiplicare la seconda riga di An per X0 . In questo caso si dimostra facilmente per induzione, usando la formula (1.5), che (cfr. Esercizio A1.28): Proposizione 1.2.3. Per ogni intero n ≥ 1 si ha   fn−1 fn An = , fn fn+1 dove {fn } `e la successione dei numeri di Fibonacci. Purtroppo non `e affatto facile, in generale, calcolare le potenze di una matrice: di ci` o ci renderemo conto appieno quando, nel Capitolo 2, affronteremo il problema della complessit`a computazionale di alcune operazioni. Tuttavia in alcuni casi, come quello in esame, il calcolo non `e difficile, ed `e quanto vogliamo mostrare ora. Se abbiamo una matrice D diagonale, cio`e del tipo   a 0 D= , 0 b il calcolo di Dn `e banale, in quanto Dn =



an 0 0 bn



.

Ricordiamo che una matrice B su un campo K si dice diagonalizzabile se esiste una matrice C a determinante diverso da zero tale che B = C · D · C −1 , dove D `e una matrice diagonale. Anche per le matrici diagonalizzabili il calcolo delle potenze non `e difficile. Infatti, se B `e come sopra, si ha ovviamente B n = C · Dn · C −1 . Poich´e Dn si calcola agevolmente, basta dunque conoscere D e C per conoscere le potenze di B. Ora c’`e un facile criterio di diagonalizzabilit` a per le matrici: una matrice B di ordine m `e diagonalizzabile se il suo polinomio caratteristico PB (t) ha m radici distinte in K (cfr. i richiami contenuti nella

1.2 Il concetto di ricorsivit` a

9

successiva § 1.3.6). Ricordiamo che PB (t) `e il polinomio di grado m su K dato dal determinante |B − tIm |, dove Im `e la matrice identica, cio`e la matrice quadrata di ordine m che ha tutti 1 sulla diagonale principale e zero altrove. Le radici del polinomio caratteristico PB (t) contenute in K si dicono autovalori di B. Se B = C · D · C −1 con D diagonale, gli elementi sulla diagonale di D sono gli autovalori di B. Nel caso della matrice reale A in (1.6) abbiamo che   −t 1 = t2 − t − 1 PA (t) = det 1 1−t `e un polinomio con due radici reali e distinte date da √ √ 1+ 5 1− 5 λ1 = , λ2 = . 2 2

(1.7)

Pertanto A `e diagonalizzabile e dunque abbiamo una espressione del tipo A = C · D · C −1 , con √   (1 + 5)/2 0 √ D= . (1.8) 0 (1 − 5)/2 La matrice C `e facile da determinare. Il Lettore verificher` a agevolmente (cfr. Esercizio B1.12 e B1.13) che √     1 1 1 −(1 −√ 5)/2 1 √ √ , C −1 = √ C= . (1.9) (1 + 5)/2 (1 − 5)/2 (1 + 5)/2 −1 5 In definitiva, per la Proposizione 1.2.3, abbiamo la relazione √ n     fn−1 fn (1 + 5)/2 0 √  n · C −1 . =C· fn fn+1 0 (1 − 5)/2

Di qui, moltiplicando le matrici al secondo membro, si arriva alla seguente formula chiusa per l’n-esimo numero di Fibonacci: 1 fn = √ 5



√ n

√ n 1+ 5 1− 5 − . 2 2

(1.10)

Per completezza enunciamo il seguente risultato che generalizza quanto abbiamo dimostrato nel caso dell’equazione ricorsiva (1.5). Proposizione 1.2.4. Fissato un intero positivo k, consideriamo la relazione ricorsiva lineare omogenea definita su un campo K an+k = bk−1 an+k−1 + bk−2 an+k−2 + · · · + b0 an ,

per n ≥ 0,

(1.11)

10

1 Qualche richiamo sui numeri

dove b0 , b1 , . . . , bk−1 sono i coefficienti consideri la matrice quadrata di ordine ⎛ 0 1 0 ⎜0 0 1 ⎜ ⎜0 0 0 ⎜ A=⎜ . . . ⎜ .. .. .. ⎜ ⎝0 0 0 b0 b 1 b 2 il cui polinomio caratteristico `e

e a0 , a1 , . . . , ak−1 i valori iniziali. Si k definita da ⎞ 0 ... 0 0 ... 0 ⎟ ⎟ 1 ... 0 ⎟ ⎟ .. ⎟ .. . . . . ⎟ . ⎟ 0 ... 1 ⎠ b3 . . . bk−1

PA (t) = tk − bk−1 tk−1 − bk−2 tk−2 − · · · − b1 t − b0 . Si supponga che PA (t) abbia k radici distinte λi , 1 ≤ i ≤ k, in K. Allora le soluzioni della relazione ricorsiva sono della forma an =

k 

ci λni ,

i=1

per ogni n ≥ 0,

con ci costanti univocamente determinate dal sistema di equazioni lineari k 

ci λhi = ah ,

i=1

con

0 ≤ h ≤ k − 1,

determinato dai valori iniziali a0 , a1 , . . . , ak−1 . Sappiamo quindi come risolvere le relazioni ricorsive lineari omogenee, nel caso che il polinomio caratteristico della matrice associata alla relazione ricorsiva abbia radici distinte. Osservazione 1.2.5. La dimostrazione della Proposizione 1.2.4 non `e in sostanza dissimile da quella che ci ha portato alla formula (1.10). Pertanto ne tralasciamo la dimostrazione affidando ai Lettori pi` u interessati il compito di ritrovarla da soli seguendo le indicazioni date dianzi. Osservazione 1.2.6. Nel caso in cui gli autovalori non siano distinti, `e ancora possibile dare, con tecniche analoghe ma pi` u difficili, una formula per la soluzione dell’equazione ricorsiva, la cui scrittura risulta per` o pi` u complicata. Osservazione 1.2.7. Il numero

√ 1+ 5 (1.12) 2 che abbiamo incontrato nel calcolo dei numeri di Fibonacci prende il nome di rapporto aureo o proporzione divina. L’origine di questo nome sta nel fatto che due grandezze a e b erano considerate dagli antichi Greci avere il rapporto pi` u armonioso se legate dalla relazione

1.2 Il concetto di ricorsivit` a

11

a+b a = . (1.13) b a Ad esempio i lati della facciata del Partenone verificano questa propriet` a. La proporzione (1.13) si pu` o esprimere a parole dicendo che una grandezza sta ad una sua parte come la parte sta alla rimanente. Risolvendo la proporzione (1.13), si ottiene facilmente √ 1+ 5 a = = 1, 618033989 . . . b 2 Nell’Esercizio A1.29 `e descritta la costruzione geometrica che permette, dato un segmento di lunghezza a, di costruire con riga e compasso il segmento di lunghezza b tale che a/b sia il rapporto aureo. Talvolta il numero (1.12) si indica con la lettera Φ, dal nome dell’artista greco Fidia, che nelle sue sculture utilizz` o spesso questo rapporto. Anche l’altra radice √ 1 1− 5 = − = 1 − Φ = −0, 618033989 . . . 2 Φ ˆ Per notizie sul rapporto gode di molte delle propriet` a di Φ, e spesso si indica con Φ. aureo nella matematica antica, cfr. [10], [58]. u vicino Notiamo ancora che la √ formula (1.10) ci√dice che fn `e il numero intero pi` ˆ n / 5| < 1/2 per ogni n. al numero irrazionale Φn / 5, perch´e |Φ

Nella parte rimanente di questo paragrafo daremo altri esempi di problemi che si risolvono con l’uso di formule ricorsive. Questi esempi sono interessanti, ma non strettamente necessari per il seguito. 1.2.2 Altri esempi di dinamica di popolazioni Esempio 1.2.8. Un entomologo osserva una popolazione di scarabei la cui evoluzione `e soggetta alle seguenti regole: • • •

la met` a degli scarabei muore dopo il primo anno di et` a; 2/3 di quelli sopravvissuti muore dopo il secondo anno di vita; nel terzo anno di vita ciascuno scarabeo genera 6 scarabei e poi muore.

Ci si chiede in che modo evolve la popolazione. Indichiamo con: a compresa fra 0 e 1 anno osservati dall’entomologo an : il numero degli scarabei di et` nell’anno n-esimo dello studio della popolazione; a compresa fra 1 e 2 anni osservati dall’entomologo bn : il numero degli scarabei di et` nell’anno n-esimo; a compresa fra 2 e 3 anni osservati nell’anno n-esimo. cn : il numero degli scarabei di et` Con questi numeri formiamo il vettore numerico colonna ⎛ ⎞ an Xn = ⎝ b n ⎠ cn

12

1 Qualche richiamo sui numeri

che descrive appunto la distribuzione della popolazione di scarabei nell’anno n-esimo ed `e quindi quel che vorremmo determinare. Il valore iniziale che dobbiamo supporre noto `e il vettore X0 . Vogliamo descrivere l’evoluzione della popolazione mediante una formula ricorsiva del tipo per ogni n ≥ 0, Xn+1 = A · Xn dove A `e una matrice 3 × 3, da cui seguir` a che Xn = An · X0

per ogni n ≥ 1.

Come trovare A? Basta osservare che le regole di evoluzione si riflettono nelle seguenti relazioni:   2 an bn bn = , cn+1 = 1 − , an+1 = 6cn , bn+1 = 2 3 3 che si possono scrivere in forma matriciale nel ⎛ ⎞ ⎛ an+1 0 0 Xn+1 = ⎝ bn+1 ⎠ = ⎝ 1/2 0 cn+1 0 1/3

dove

modo seguente ⎞ ⎛ ⎞ an 6 0 ⎠ · ⎝ b n ⎠ = A · Xn , cn 0



⎞ 0 0 6 A = ⎝ 1/2 0 0 ⎠ . 0 1/3 0

3 Il polinomio √ caratteristico √ PA (t) vale 1 − t , che ha le tre radici complesse distinte 1, (−1 + i 3)/2, (−1 − i 3)/2, dove i `e l’unit` a immaginaria. Dunque A `e diagonalizzabile su C e ci` o consente di calcolare agevolmente le potenze di A. Questo, a sua volta, permette il calcolo di una formula chiusa per il vettore Xn , che lasciamo al Lettore volenteroso da calcolare (cfr. Esercizio B1.17).

Esempio 1.2.9. Ogni anno un decimo delle persone che vivono al di fuori della Liguria si trasferiscono a vivere in questa regione e contemporaneamente un quinto di quelli che vivono in Liguria vanno a vivere altrove. Come evolve la popolazione della Liguria? Indichiamo con: yn : il numero di persone fuori dalla Liguria nell’anno n-esimo del nostro studio della popolazione di questa regione; zn : il numero di persone che sono in Liguria nell’anno n-esimo. Formando il solito vettore Xn =



 yn , zn

si vede che il fenomeno si descrive ricorsivamente mediante la formula Xn = A · Xn−1 per ogni n ≥ 1, dove A `e la matrice

A=

1 10



1.2 Il concetto di ricorsivit` a  9 2 . 1 8

13

Quindi, per ogni n ≥ 1 vale la formula Xn = An · X0 . Gli autovalori della matrice A sono 7/10 e 1. Dunque A `e diagonalizzabile e se ne calcolano facilmente le potenze successive. Ci` o consente di ottenere una formula chiusa per il vettore Xn . Ne lasciamo al Lettore il compito (cfr. Esercizio B1.19).

1.2.3 La torre di Hanoi: un caso lineare non omogeneo Esempio 1.2.10. Si tratta del gioco della Torre di Hanoi, inventato dal matematico E. Lucas nel 1883. La Torre di Hanoi consiste di n dischi circolari infilati ciascuno in un’asticella verticale A, con diametri decrescenti dal basso verso l’alto. Scopo del gioco `e di trasferire tutti i dischi, nello stesso ordine di prima, ossia con diametri decrescenti dal basso verso l’alto, su di un’altra asticella C, usando un’asticella intermedia B (vedi figura 1.1) e osservando le seguenti regole: (i) i dischi devono essere trasferiti da un’asticella all’altra uno alla volta; (ii) in nessun momento del gioco su una data asticella un disco di diametro maggiore pu` o trovarsi al di sopra di un disco di diametro minore.

A

B

C

Figura 1.1. La torre di Hanoi con n = 5 dischi Ci poniamo il problema di determinare il numero Mn di mosse necessarie per terminare il gioco partendo da n dischi. Pare che il gioco abbia la seguente origine. I sacerdoti del tempio di Brahma avevano il compito di fare in continuazione questi trasferimenti partendo da 64 dischi d’oro posti su tre aste d’oro poggiate su basi di diamante. La leggenda vuole che, nell’istante stesso in cui il trasferimento fosse avvenuto, il mondo sarebbe terminato! Procediamo per induzione su n. Per n = 1, ovviamente basta una mossa: M1 = 1. Partiamo ora da n dischi sull’asticella A. Per ipotesi induttiva possiamo spostare gli o il n − 1 dischi superiori dall’asticella A all’asticella B in Mn−1 mosse. Nel fare ci` disco pi` u largo che `e restato nell’asticella A non viene mai mosso. Con una mossa trasferiamo ora il disco pi` u grande dall’asticella A all’asticella C. Trasferiamo ora con Mn−1 mosse gli n − 1 dischi dall’asticella B all’asticella C, disponendoli sopra

14

1 Qualche richiamo sui numeri

il disco pi` u grande. Abbiamo dunque concluso le operazioni in 2Mn−1 + 1 mosse, ed `e chiaro che non si riesce a risolvere il gioco con un numero minore di mosse. Abbiamo pertanto la seguente relazione ricorsiva: Mn = 2Mn−1 + 1,

M1 = 1,

che possiamo risolvere ottenendo una formula chiusa nel modo seguente Mn = 2Mn−1 + 1 = 2(2Mn−2 + 1) + 1 = 22 Mn−2 + 2 + 1 = = 22 (2Mn−3 + 1) + 2 + 1 = 23 Mn−3 + 22 + 2 + 1 = = · · · = 2n−1 M1 + 2n−2 + 2n−3 + · · · + 22 + 2 + 1 = = 2n−1 + 2n−2 + 2n−3 + · · · + 22 + 2 + 1 = 2n − 1,

da cui il numero totale di mosse `e Mn = 2n − 1. Se i sacerdoti del tempo di Brahma impiegassero trenta secondi per effettuare una mossa e non sbagliassero mai mossa, impiegherebbero 30 · (264 − 1) secondi per completare il loro compito. Il Lettore potr` a stimare il numero di anni che mancherebbe alla fine del mondo: una cifra davvero molto alta! (cfr. Esercizio B1.33).

1.3 L’algoritmo di Euclide In questo paragrafo lavoriamo nell’insieme Z = {. . . , −3, −2, −1, 0, 1, 2, 3, . . .} dei numeri interi relativi. Come si sa, Z `e dotato delle due operazioni + di addizione e · di moltiplicazione che lo rendono un anello commutativo unitario, privo di divisori dello zero, cio`e in cui vale la legge di annullamento del prodotto (che dice che ab = 0 implica a = 0 oppure b = 0), ossia un dominio di integrit` a. Esiste inoltre una relazione d’ordine naturale ≤ in Z, che consente di costruire la funzione valore assoluto n ∈ Z → |n| ∈ Z, dove |n| = n se n ≥ 0 mentre |n| = −n se n ≤ 0. 1.3.1 La divisione Cominciamo col ricordare un fatto semplicissimo che si impara fin dalle scuole elementari: i numeri interi si possono dividere tra loro. La possibilit` a di effettuare tale operazione si basa su un algoritmo illustrato nella seguente proposizione: Proposizione 1.3.1. Siano a e b interi, con b = 0. Allora esistono e sono univocamente individuati due interi q ed r tali che a = bq + r,

con

0 ≤ r < |b|.

1.3 L’algoritmo di Euclide

15

Dimostrazione. Supponiamo inizialmente che b sia un intero positivo. Consideriamo l’insieme di tutti i multipli interi di b: . . . , −kb, . . . , −2b, −b, 0, b, 2b, . . . , kb, . . . , dove k `e un intero positivo. Esiste un unico q ∈ Z tale che (cfr. Esercizio A1.8) qb ≤ a < (q + 1)b. Si pone r = a − qb e ci`o determina i due numeri q ed r richiesti. Osserviamo che 0 ≤ r < b per costruzione e q `e unico perch´e `e il minimo intero il cui prodotto per b non supera a. Di conseguenza anche r `e unico. Se b `e negativo, per quanto gi` a dimostrato, si ha, in modo unico, a = q ′ (−b) + r, con 0 ≤ r < −b = |b|. Basta allora porre q = −q ′ per trovare i due numeri q ed r richiesti, la cui unicit` a segue da quella gi` a provata nel caso b > 0. ⊓ ⊔ L’algoritmo descritto nella Proposizione (1.3.1) permette dunque di determinare gli interi q ed r a partire da a e b, e prende anche il nome di divisione di a per b. Chiameremo a dividendo, b divisore, q quoziente ed r resto della divisione. Ad esempio, dividendo 34 per 8 o per −8 si ha 34 = 8 · 4 + 2,

34 = (−8) · (−4) + 2,

quindi quozienti e resti sono 4 e 2 nel primo caso, −4 e 2 nel secondo. Invece dividendo −34 per 8 o per −8 si ha −34 = 8 · (−5) + 6,

−34 = (−8) · 5 + 6,

quindi quozienti e resti sono −5 e 6 nel primo caso, 5 e 6 nel secondo. Definizione 1.3.2. Un numero a si dice divisibile per un numero b = 0 (o si dice che b `e un divisore di a o che b divide a, e si scrive b | a), se il resto della divisione di a per b `e zero. In altre parole, a `e divisibile per b se esiste un intero m tale che a = mb, cio`e se a `e un multiplo intero di b. Ogni intero a ha come divisori 1, −1, a e −a. Questi si dicono i divisori banali di a. I numeri a e −a che differiscono solo per il segno, si dicono associati ad a. Ovviamente 1 e −1 non hanno altri divisori che 1 e −1 e quindi sono gli unici numeri invertibili in Z (un numero a si dice invertibile se esiste un numero b tale che ab = 1). Notiamo ancora che se a | b e b | c allora a | c. Segnaliamo il seguente semplice fatto: Lemma 1.3.3. Siano a, b interi. Si ha che a | b e b | a se e solo se a e b sono associati, cio`e o a = b oppure a = −b.

16

1 Qualche richiamo sui numeri

Dimostrazione. Per ipotesi, esistono due numeri interi n, m tali che b = na e a = mb. Allora b = nmb e dunque nm = 1. Pertanto o n = m = 1 oppure n = m = −1. ⊓ ⊔ Se a > 1 ha soltanto divisori banali si dice un numero irriducibile o primo. Come vedremo i numeri primi sono importanti perch´e costituiscono i mattoni elementari a partire dai quali si possono costruire mediante moltiplicazioni tutti gli interi. Per ora per` o tralasciamo questo fondamentale argomento, posponendolo al successivo Capitolo 4, per occuparci di una questione semplice e naturale: dati due interi a e b non nulli, quali sono i loro divisori comuni? Faremo vedere che, con l’uso reiterato di divisioni, il problema si riduce a calcolare i divisori di un unico intero d. 1.3.2 Il massimo comun divisore Cominciamo con un’osservazione ovvia: i divisori dell’intero a coincidono con quelli dell’intero −a. Dunque nella questione di cui ci stiamo occupando basta limitarsi al caso in cui a e b siano entrambi positivi e a ricercare i loro divisori comuni positivi. Considereremo perci` o solo questo caso. Facciamo le seguenti divisioni, nelle prime n delle quali supponiamo che il resto sia positivo, mentre nell’ultima sia zero: 1. 2. 3.

i + 2.

n − 1. n. n + 1.

a = b q1 + r1 , b = r1 q2 + r2 , r1 = r2 q3 + r3 , .. . ri = ri+1 qi+2 + ri+2 , .. . rn−3 = rn−2 qn−1 + rn−1 , rn−2 = rn−1 qn + rn , rn−1 = rn qn+1 + 0.

0 < r1 < b, 0 < r2 < r1 , 0 < r3 < r2 ,

0 < ri+2 < ri+1 ,

0 < rn−1 < rn−2 , 0 < rn < rn−1 ,

Notiamo che, quando si effettuano le suddette divisioni successive, necessariamente, prima di averne effettuate b, ne troveremo una con il resto zero. Infatti si ha che b > r1 > r2 > r3 > · · · `e una successione strettamente decrescente di interi non negativi. Osserviamo anche che i divisori comuni di a e b sono i divisori comuni di b e r1 : infatti, se un intero divide a e b, allora divide ogni multiplo di b, e divide la differenza di a e qb, cio`e divide r1 . D’altra parte, se un intero divide b ed r1 , divider` a anche a = bq1 + r1 per gli stessi motivi di prima. Usando la seconda divisione indicata sopra, vediamo che i divisori comuni di b e r1 sono i divisori comuni di r1 e r2 . Continuando in questo modo, otteniamo che i divisori comuni di a e b sono i divisori comuni di rn−1

1.3 L’algoritmo di Euclide

17

e rn . Poich´e rn−1 `e un multiplo di rn , i divisori comuni di rn−1 e rn sono ovviamente tutti e soli i divisori di rn . Poniamo d = rn , ultimo resto non nullo nella serie delle divisioni successive effettuate. Abbiamo appena visto che d `e un divisore comune di a e b ed inoltre `e il pi` u grande divisore comune di a e b: infatti se d′ `e un divisore comune di a e b, allora, come abbiamo visto, d′ `e un divisore di d. Da qui la terminologia per d di massimo comun divisore e il simbolo M CD(a, b) per indicarlo. Se M CD(a, b) = 1, i due numeri a e b non hanno divisori non banali a comune: in tal caso si dice che essi sono relativamente primi, o primi tra loro. L’algoritmo che abbiamo appena descritto si chiama algoritmo di Euclide, o algoritmo euclideo delle divisioni successive e ci offre un metodo per il calcolo effettivo del massimo comun divisore di due interi a e b. Osservazione 1.3.4. Dati due interi positivi a e b, se ne conosciamo tutti i divisori, ovviamente ne determiniamo subito il massimo comun divisore. In particolare, anticipando quel che vedremo nel Capitolo 4 ma che comunque abbiamo gi` a imparato alle scuole elementari, questo vale se conosciamo una decomposizione in fattori primi di a e b. Infatti, come `e ben noto, il M CD(a, b) `e il prodotto dei fattori primi comuni di a e b presi con l’esponente pi` u piccolo con cui compaiono nella fattorizzazione dei due numeri. Tuttavia, come vedremo nel Capitolo 4, trovare la fattorizzazione di un intero n `e un problema molto difficile dal punto di vista computazionale, ossia richiede, in generale, un tempo di calcolo che cresce enormemente al crescere di n, al punto da divenire, se n `e sufficientemente grande, superiore alla stima della vita dell’universo! Quindi il metodo che ci hanno insegnato a scuola, basato sulla conoscenza della decomposizione in fattori primi di a e b, pur essendo teoricamente ineccepibile, pu` o non essere utile in pratica. Il vantaggio dell’algoritmo euclideo `e che ci permette di trovare il M CD(a, b) di due interi a e b, pur non conoscendone la decomposizione in fattori primi. Come vedremo nel Capitolo 2, questo algoritmo `e pi` u efficiente, in un senso che renderemo preciso.

1.3.3 L’identit` a di B´ ezout L’algoritmo di Euclide ci offre anche un modo per provare che esiste una relazione del tipo M CD(a, b) = αa + βb (1.14) con α e β opportuni interi. La (1.14) si chiama identit` a di B´ezout e risulta molto utile. Ad esempio `e il punto di partenza per la risoluzione delle equazioni lineari diofantee, che affronteremo tra poche righe, e delle congruenze lineari, che tratteremo nel prossimo capitolo. Per dimostrarla, basta far vedere che tutti i resti delle divisioni successive si possono scrivere come combinazioni di a e b. Infatti osserviamo che r1 = a − b q1 ,

r2 = b − r1 q2 , .. . rn = rn−2 − rn−1 qn ,

18

1 Qualche richiamo sui numeri

da cui r2 = b − r1 q2 = b − (a − bq1 )q2 = (−q2 )a + (1 + q1 q2 )b, cio`e r1 e r2 si scrivono come combinazione di a e b. Ma allora anche r3 , che `e una combinazione a coefficienti interi di r1 e r2 , sar`a una combinazione a coefficienti interi di a e b. In definitiva, d = rn `e una combinazione a coefficienti interi di rn−1 e rn−2 e quindi di a e b. Segnaliamo le seguenti importanti conseguenze: Proposizione 1.3.5. Siano a, b due interi positivi. Essi sono primi tra loro se e solo se esistono due interi α, β tali che αa + βb = 1.

(1.15)

Dimostrazione. Se a, b sono primi tra loro, si ha M CD(a, b) = 1 e l’asserto segue dall’identit` a di B´ezout. Viceversa, supponiamo valga la (1.15). Sia d un divisore comune di a e b. Allora chiaramente d divide anche αa + βb, e dunque divide 1. Pertanto d = 1 o d = −1 e dunque a e b sono primi tra loro. ⊓ ⊔ Corollario 1.3.6. Siano a, b due interi positivi e sia d = M CD(a, b). Posto a = dn e b = dm, si ha M CD(n, m) = 1. Dimostrazione. La (1.14) si scrive ora d = dnα + dmβ. Dividendo per d ambo i membri si ha αn + βm = 1 ed applicando la Proposizione 1.3.5 si ha che n e m sono primi tra loro.

⊓ ⊔

Corollario 1.3.7. Siano a, b1 , b2 interi con a primo sia con b1 sia con b2 . Allora a `e primo con b1 b2 . Dimostrazione. Si hanno relazioni del tipo 1 = αa + β1 b1 ,

1 = α′ a + β2 b2 .

Moltiplicandole membro a membro si trova 1 = (αα′ a + αβ2 b2 + α′ β1 b1 )a + (β1 β2 )(b1 b2 ) da cui segue l’asserto.

⊓ ⊔

Corollario 1.3.8. Siano a, b, n interi tali che a | n, b | n e M CD(a, b) = 1. Allora ab | n.

1.3 L’algoritmo di Euclide

19

Dimostrazione. Si ha n = n1 a = n2 b. Inoltre si ha una relazione del tipo (1.15). Moltiplicandone ambo i membri per n si trova n = αna + βnb = αn2 (ab) + βn1 (ab) ⊓ ⊔

da cui segue l’asserto.

Corollario 1.3.9. Siano a, b due interi positivi primi tra loro e sia n un ulteriore intero. Se a | bn allora a | n. Dimostrazione. Per ipotesi esiste un intero m tale che bn = am.

(1.16)

Per l’identit`a di B´ezout, esistono interi α e β tali che valga la (1.15). Moltiplicando ambo i membri di quest’ultima per n e tenendo conto della (1.16), si ha n = αan + βbn = αan + βam da cui segue che a | n.

⊓ ⊔

Notiamo che l’espressione del M CD(a, b) fornita dalla (1.14) non `e affatto unica. Ad esempio: 1 = 3 · 7 + (−4) · 5 = (−2) · 7 + 3 · 5. Esempio 1.3.10. Analizziamo ora un esempio per capire come funziona l’algoritmo euclideo per trovare una relazione di B´ezout. Nel far ci` o introdurremo una notazione particolarmente efficace sia nel caso in cui si voglia programmare l’algoritmo su un calcolatore, sia nel caso in cui si facciano i conti a mano. Vogliamo determinare una identit` a di B´ezout per il M CD(1245, 56). Seguendo l’algoritmo di Euclide si fanno i seguenti passaggi: 1245 = 56 · 22 + 13, 56 = 13 · 4 + 4, 13 = 4 · 3 + 1 , 4 = 1 · 4 + 0.

(1.17)

Risulta M CD(1245, 56) = 1. Vogliamo ora esprimere 1 nella forma αa + βb, con a = 1245, b = 56. Per farlo conviene introdurre la seguente notazione: αa + βb ≡ (α, β). Si dimenticano cio`e a e b e si scrivono solo i coefficienti della combinazione lineare come elementi di una coppia. Allora ad a resta associata la coppia (1, 0), mentre a b resta associata la coppia (0, 1). La somma tra coppie `e data da def (α, β) + (α′ , β ′ ) = (α + α′ , β + β ′ ),

20

1 Qualche richiamo sui numeri

e inoltre

def

γ(α, β) = (γ · α, γ · β)

per ogni α, β, γ, α′ , β ′ ∈ Z. Allora si riscrivono i passaggi dell’algoritmo di Euclide nel modo seguente: r1 = 13 = a + b · (−22), r2 = 4 = b + r1 · (−4), r3 = 1 = r1 + r2 · (−3),

che con le notazioni appena introdotte diventano r1 = 13 = a + b · (−22) ≡ (1, 0) + (0, 1)(−22) = (1, −22),

r2 = 4 = b + r1 · (−4) ≡ (0, 1) + (1, −22)(−4) = (−4, 89), r3 = 1 = r1 + r2 · (−3) ≡ (1, −22) + (−4, 89)(−3) = (13, −289), e quindi una identit` a di B´ezout per il M CD(1245, 56) `e 1 = 13 · 1245 + (−289) · 56. Si osservi che, come risulta evidente dall’algoritmo, nella determinazione della coppia associata ad un resto ri si utilizzano solo le due coppie associate o quindi lavorare rispettivamente ai due resti precedenti, cio`e ri−1 e ri−2 . Si pu` direttamente con le coppie, senza passare attraverso la scrittura intermedia. 1.3.4 Equazioni lineari diofantee Una prima applicazione di quanto abbiamo visto in questo paragrafo `e lo studio delle cosiddette equazioni lineari diofantee. Si tratta di equazioni del tipo ax + by = c, (1.18) dove a, b, c sono in Z. Il caso in cui a o b siano nulli `e banale e pertanto lo tralasciamo. Supponiamo di voler vedere se l’equazione possiede soluzioni intere cio`e soluzioni (x, y) con x, y ∈ Z. Geometricamente l’equazione rappresenta, in un piano in cui si siano introdotte coordinate cartesiane, una retta non parallela a nessuno dei due assi coordinati e ci interessa vedere se passa per punti interi, cio`e punti di cui entrambe le coordinate siano numeri interi. La seguente proposizione d` a una condizione necessaria e sufficiente perch´e l’equazione ax + by = c ammetta soluzioni intere. Proposizione 1.3.11. L’equazione ax + by = c, con a, b, c ∈ Z ed a, b non nulli, possiede una soluzione intera (x, y) se e solo se il M CD(a, b) divide c. Dimostrazione. Sia (¯ x, y¯) una soluzione intera dell’equazione (1.18) e sia d = M CD(a, b). Allora d, dividendo a e b, divider` a il primo membro dell’equazione e quindi anche c.

1.3 L’algoritmo di Euclide

21

Viceversa, supponiamo che d divida c, cio`e che c si scriva come c = d · h. Scriviamo d nella forma d = αa + βb. Moltiplicando ambo i membri per h si ha c = αha + βhb ⊓ ⊔

e posto x ¯ = αh e y¯ = βh, ne segue che (¯ x, y¯) `e soluzione di (1.18). Ad esempio, l’equazione 3x + 4y = −1

(1.19)

`e risolubile in Z, perch´e M CD(3, 4) = 1 divide -1. Essendo 1 = 3(−1) + 4(1), si ha −1 = 3(1) + 4(−1). Una soluzione `e quindi (1, −1). Si osservi che tale soluzione non `e unica: altre soluzioni di (1.19) sono (−3, 2), (−7, 5) e (5, −4) (vedi figura 1.2). ·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·



·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·



·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

•1

·

·

·

·

·

·

·

·

·

·

·

·

·

· 1• ·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·



·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·



·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

y

x

·

Figura 1.2. Retta 3x + 4y = −1 nel piano cartesiano

1.3.5 Anelli euclidei ` utile porre le considerazioni fatte per l’algoritmo della divisione in Z in un ambito E astratto pi` u generale. Per tale motivo richiamiamo alcune nozioni sulla divisibilit` a in un anello e negli anelli euclidei in particolare. Consideriamo un anello commutativo unitario A. Possiamo estendere agli elementi di A gran parte delle definizioni concernenti la divisibilit` a introdotte nell’anello dei numeri interi Z. Innanzitutto, un elemento a ∈ A si dice invertibile, se esiste un b ∈ A tale che ab = 1. Ovviamente 1 e −1 sono invertibili, gli elementi invertibili sono tutti non

22

1 Qualche richiamo sui numeri

nulli, e formano un gruppo rispetto al prodotto: tale gruppo si denota col simbolo A∗ o con U (A). Siano a, b elementi di A con b = 0. Si dice che b divide a, o che `e un divisore di a, o che a `e un multiplo di b, e si scrive b | a, se esiste un x ∈ A tale che a = bx. Notiamo che se a | b e b | c allora a | c. Ovviamente ogni elemento invertibile divide ogni altro elemento di A. Due elementi a, b non nulli di A si dicono associati se a = bx con x elemento invertibile. Vale l’analogo del Lemma 1.3.3, ossia a | b e b | a se e solo se a e b sono associati. Consideriamo un dominio di integrit` a A, ossia un anello commutativo unitario e privo di divisori dello zero. Un dominio di integrit` a A si dice euclideo se esiste un’applicazione v : A \ {0} → N

che gode delle seguenti propriet` a:

(1) per ogni coppia (a, b) di elementi non nulli di A si ha v(ab) ≥ v(a); (2) per ogni a ∈ A e per ogni b ∈ A \ {0}, esistono q, r ∈ A (detti rispettivamente quoziente e resto della divisione di a per b) tali che a = bq + r e o r = 0 oppure v(r) < v(b). Ovviamente Z `e un anello euclideo prendendo v(a) = |a|, per ogni a ∈ Z. Dunque A `e un anello euclideo se esiste in A un algoritmo della divisione come in Z. Un altro esempio banale di anello euclideo `e quello di un campo A. Basta prendere come v l’applicazione costante di valore 1 e prendere come quoziente q e resto r della divisione di a per b rispettivamente q = a/b, r = 0. Dato un dominio di integrit` a A e dati due elementi a, b non nulli, `e possibile considerare l’insieme D(a, b) dei divisori comuni di a e b. Notiamo che per ogni c ∈ D(a, b) e per ogni x invertibile, si ha anche cx ∈ D(a, b). Si dice d ∈ D(a, b) `e un massimo comun divisore di a e b, e lo si indica con M CD(a, b), se per ogni c ∈ D(a, b) si ha c | d. Si noti che se d, d′ sono entrambi un massimo comun divisore di a e b, essi sono associati e viceversa, se d = M CD(a, b) e se d′ `e associato a d, anche d′ = M CD(a, b) (cfr. Esercizio A1.44). Se il massimo comun divisore di a e b `e invertibile, e quindi si pu` o assumere M CD(a, b) = 1, a e b si dicono primi tra loro. In un dominio di integrit` a qualunque A non `e affatto detto che esista il massimo comun divisore di due elementi. Tuttavia ci` o accade sempre se A `e euclideo, perch´e si applica esattamente lo stesso procedimento che si usa in Z. Vale dunque il: Teorema 1.3.12. Sia A un anello euclideo. Se a, b ∈ A sono elementi non nulli, esiste il M CD(a, b) che si determina con l’algoritmo euclideo delle divisioni successive. Inoltre vale l’identit` a di B´ezout, ossia esistono α, β ∈ A tali che valga la (1.14). Vale la pena di dare una diversa interpretazione del massimo comun divisore in un anello euclideo. Ricordiamo che in un anello commutativo unitario A, un ideale I `e un sottoinsieme tale che (1) per ogni x, y ∈ I si ha x + y ∈ I; (2) per ogni x ∈ I e per ogni y ∈ A, si ha xy ∈ I. In generale A e {0} sono ideali che si dicono banali. L’ideale {0} si denota semplicemente con 0 e si chiama ideale nullo.

1.3 L’algoritmo di Euclide

23

Dati x1 , . . . , xn ∈ A, si consideri l’insieme I di tutti gli elementi di A del tipo x1 y1 + · · · + xn yn , con y1 , . . . , yn elementi di A. L’insieme I `e un ideale che si dice (finitamente) generato da x1 , . . . , xn e si indica col simbolo (x1 , . . . , xn ). Un ideale (x) generato da un unico elemento x ∈ A si dice principale ed `e costituito da tutti e soli i multipli di x. Ad esempio A = (1) e 0 = (0) sono ideali principali. Si noti che (x) = (y) se e solo se x e y sono associati (cfr. Esercizio A1.46). Un anello commutativo si dice a ideali principali se ogni suo ideale `e principale. Osserviamo che: Proposizione 1.3.13. Se A `e un dominio di integrit` a a ideali principali, allora per ogni coppia (a, b) di elementi non nulli di A esiste il M CD(a, b) e tale `e ogni generatore dell’ideale (a, b). Dimostrazione. Sia d un generatore dell’ideale (a, b). Poich´e a, b ∈ (a, b), `e chiaro che d divide sia a che b. Notiamo ora che vale l’identit` a di B´ezout d = α + βb, per cui, se c ∈ D(a, b) `e un divisore comune di a e b, `e chiaro che c divide d. ⊔ ⊓ Per gli anelli euclidei vale il seguente notevole: Teorema 1.3.14. Ogni anello euclideo `e ad ideali principali. Dimostrazione. Sia A un anello euclideo e ne sia I un ideale. Se I = 0 non c’`e nulla da dimostrare. Se I = 0, sia b ∈ I un elemento non nullo tale che per ogni a ∈ I non nullo si abbia v(b) ≤ v(a) (qui si usa il Principio del Minimo, cfr. Esercizio A1.2). Sia a ∈ I un qualunque elemento. Esistono q, r tali che a = bq + r con v(r) < v(b). Si osservi che r ∈ I e, per la definizione di b, si ha r = 0. Dunque a `e multiplo di b, il che prova il teorema. ⊔ ⊓ Come conseguenza abbiamo: Corollario 1.3.15. Sia A un anello euclideo e ne siano a, b elementi non nulli. Allora d = M CD(a, b) se e solo se d `e un generatore dell’ideale (a, b). In particolare Z `e un anello a ideali principali. Un altro interessante esempio di anello euclideo sar` a mostrato nell’Esercizio A1.49. Un ulteriore importante esempio viene introdotto nel prossimo paragrafo.

1.3.6 Polinomi ` naturale a questo punto richiamare alcune nozioni sui polinomi, evidenziando E le similarit` a di questi ultimi con gli interi, ed interpretando alcune loro propriet` a basilari in termini di divisibilit` a. Definizione 1.3.16. Un polinomio p(x) a coefficienti su un anello commutativo unitario A `e una espressione formale del tipo p(x) = a0 + a1 x + a2 x2 + · · · + an xn =

n  i=0

ai xi ,

ai ∈ A,

(1.20)

dove x `e una indeterminata o variabile. Gli elementi a0 , a1 , . . . , an ∈ K si dicono i coefficienti del polinomio. Se an = 0, l’intero n si definisce grado del polinomio e

24

1 Qualche richiamo sui numeri

si indica con deg(p(x)), oppure con ∂p(x). I polinomi di grado 0 si dicono costanti e si identificano con gli elementi di A. I polinomi di primo grado si dicono lineari, quelli di secondo grado quadratici, quelli di terzo grado cubici, ecc. Il coefficiente an prende il nome di coefficiente direttore di p(x). Se esso vale 1, il polinomio si dice monico. Si noti che il grado di una costante non nulla `e zero. Al polinomio nullo, ossia al polinomio che ha tutti i coefficienti uguali a zero, non si attribuisce alcun grado. In modo pi` u formale, si pu` o identificare il polinomio (1.20) con la successione di elementi di A { a0 , a1 , . . . , an , 0, 0, . . . },

che assume, a partire da un certo punto  in poi il valore 0. Si usa porre ai = 0 per i ogni i > n e si pu` o anche scrivere p(x) = ∞ i=0 ai x , tenendo presente che comunque la somma `e finita. In generale quindi, usando il simbolo di uguaglianza per indicare la identificazione sopra descritta, si ha a = {a, 0, 0, 0, . . .},

x = {0, 1, 0, 0, . . .},

x2 = {0, 0, 1, 0, . . .}, .. .

1 , 0, 0, . . .). xi = {0, 0, . . . , 0,  posizione (i+1)-esima

Il polinomio corrispondente alla successione {0, 0, . . .}, cio`e alla costante 0, `e il polinomio nullo, che si indica col simbolo 0. Diamo un esempio: x3 + 2x − 1

`e un polinomio di grado 3 a coefficienti interi, e quindi anche razionali (o reali o complessi). Usando la notazione ora introdotta, il polinomio si scrive

{ −1, 2, 0, 1, 0, 0, . . . }. m  i j Dalla definizione segue che due polinomi p(x) = n i=0 ai x e q(x) = j=0 bj x , con ai , bj ∈ K, sono uguali se e solo se ai =bi , per ogni i ∈ N. In particolare, se m > n, allora bn+1 = bn+2 = · · · = bm = 0. L’insieme di tutti i polinomi a coefficienti in A si indica con A[x]. In A[x] si definiscono due operazioni m dijaddizione e moltiplicazione come segue. Siano p(x) = n i i=0 ai x e q(x) = j=0 bj x in A[x] due polinomi, con n ≤ m. Si pone allora def

p(x) + q(x) =

m 

h

(ah + bh )x ,

h=0

def

p(x)q(x) =

n+m  h=0





i+j=h



ai bj xh .

Il polinomio nullo `e l’elemento neutro per l’addizione e l’opposto del polinomio  i e il polinomio che ha come coefficienti gli opposti dei coefficienti p(x) = n i=0 ai x ` ai , per ogni i.

1.3 L’algoritmo di Euclide

25

Notiamo esplicitamente le seguenti relazioni tra i gradi di due polinomi a coefficienti in un campo, o in un dominio di integrit` a, e i gradi della loro somma e del loro prodotto: ∂(p(x) + q(x)) ≤ max(∂p(x), ∂q(x)),

∂(p(x)q(x)) = ∂p(x) + ∂q(x).

(1.21)

Rispetto alle due operazioni di addizione e moltiplicazione (1.21), i polinomi costituiscono un anello. Se A `e un dominio di dominio di integrit` a anche A[x] lo `e (cfr. Esercizio A1.51). In tal caso gli elementi invertibili in A[x] sono gli elementi invertibili di A. Iterando la costruzione di A[x] si pu` o costruire pi` u in generale l’anello A[x1 , . . . , xn ] dei polinomi nelle variabili x1 , . . . , xn sull’anello A. Il tipico elemento mn 1 di A[x1 , . . . , xn ] `e una somma finita di monomi del tipo axm 1 · · · xn , con a ∈ A e m1 , . . . , mn interi non negativi. Se a = 0 il monomio `e nullo, altrimenti l’intero m1 + · · · + mn si dice grado del monomio e il grado di un polinomio `e il massimo grado dei suoi monomi non nulli. Noi in generale considereremo polinomi su campi. ` notevole il seguente: E Teorema 1.3.17. L’anello K[x] dei polinomi su un campo K, dotato dell’applicazione ∂ : K[x] \ {0} → N,

`e un anello euclideo. In particolare, siano f (x), g(x) ∈ K[x] due polinomi, con g(x) = 0. Allora esistono, e sono univocamente individuati, due polinomi q(x) e r(x) in K[x] tali che f (x) = g(x) · q(x) + r(x),

con ∂r(x) < ∂g(x) oppure r(x) = 0.

Dimostrazione. Innanzitutto `e facile verificare che l’applicazione ∂ verifica la propriet` a (1) della definizione degli anelli euclidei. Quanto all’unicit` a della divisione, notiamo che, se f (x) = g(x) · q1 (x) + r1 (x) = g(x) · q2 (x) + r2 (x) tali che ∂ri (x) < ∂g(x) oppure ri (x) = 0 con i = 1, 2, si avrebbe (q1 (x) − q2 (x))g(x) = r2 (x) − r1 (x). Se fosse q1 (x)−q2 (x) = 0, il primo membro avrebbe grado maggiore del secondo, il che `e assurdo. Quindi deve essere q1 (x) = q2 (x) il che implica anche r2 (x) = r1 (x). Veniamo all’esistenza dell’algoritmo della divisione. Se f (x) = 0 non vi `e nulla da provare. Sia dunque f (x) = 0 e siano n, m i gradi di f (x) e g(x) rispettivamente. Se m > n basta prendere q(x) = 0 e r(x) = f (x). Supponiamo allora n ≥ m. Poich´e il teorema `e banalmente vero se n = 0, procediamo per induzione su n. Se f (x) = a0 + a1 x + · · · + an xn , poniamo

g(x) = b0 + b1 x + · · · + bm xm ,

an n−m x g(x). bm Il grado di h(x) `e minore di n e pertanto a h(x) possiamo applicare l’ipotesi di induzione. Quindi esistono q1 (x), r1 (x), con r1 (x) nullo o di grado minore di m, tali che an n−m x g(x) = h(x) = q1 (x)g(x) + r1 (x). f (x) − bm Basta allora prendere r(x) = r1 (x) e q(x) = q1 (x) + (an /bm )xn−m . ⊔ ⊓ h(x) = f (x) −

26

1 Qualche richiamo sui numeri

Come conseguenza di questo risultato e di quelli del paragrafo precedente, si ha che si pu` o considerare il massimo comun divisore di polinomi non nulli su un campo, e calcolarlo con l’algoritmo delle divisioni successive. Osserviamo che talvolta si chiama massimo comun divisore di due polinomi l’unico polinomio monico che gode di questa propriet` a (cfr. Esercizio A1.52). Esempio 1.3.18. Calcoliamo il massimo comun divisore dei due polinomi f (x) = x3 + 1,

g(x) = x2 + 1

su Q. Si ha x3 + 1 = x(x2 + 1) − x + 1,

x2 + 1 = (−x − 1)(−x + 1) + 2, 1 −x + 1 = (−x − 1) · 2, 2 sicch´e M CD(f (x), g(x)) = 2. Poich´e 2 `e invertibile, abbiamo che f (x) e g(x) sono primi tra loro. Dalle divisioni precedenti si trae 1 1 2 (x + 1) + (x + 1)(1 − x) = 2 2 1 2 1 = (x + 1) + (x + 1)[(x3 + 1) − x(x2 + 1)] = 2 2 1 2 1 = (x + 1)(−x2 − x + 1) + (x3 + 1)(x + 1) 2 2 che `e la relativa identit` a di B´ezout. Consideriamo invece i due polinomi 1=

p(x) = x3 − 1,

q(x) = x2 − 1

su Q. Si ha x3 − 1 = x(x2 − 1) + x − 1, x2 − 1 = (x + 1)(x − 1),

sicch´e M CD(f (x), g(x)) = x − 1.

Determiniamo il massimo comun divisore dei due polinomi reali f (x) = x3 + a di B´ezout. 3x2 − x − 3 e g(x) = x2 + 3x + 2 e troviamo un’identit` Con l’algoritmo euclideo delle divisioni successive si ottiene x3 + 3x2 − x − 3 = (x2 + 3x + 2)x − 3(x + 1),   1 2 x2 + 3x + 2 = −3(x + 1) − x − + 0. 3 3 Quindi

M CD(x3 + 3x2 − x − 3, x2 + 3x + 2) = x + 1. Ovviamente anche −3(x + 1) `e un massimo comun divisore, ma non `e monico. Il massimo comun divisore si esprime generalizzando la (1.14) al caso dei polinomi nel modo seguente:

1 1 x + 1 = − (x3 + 3x2 − x − 3) + x(x2 + 3x + 2) 3 3 con h(x) = −1/3 e k(x) = (1/3)x.

1.3 L’algoritmo di Euclide

27

Ricordiamo ora che, dato un polinomio f (x) ∈ K[x], un elemento α ∈ K tale che f (α) = 0 si dice radice, o zero, di f (x). Il celebre Teorema di Ruffini traduce l’esistenza di radici in termini di divisibilit` a: Teorema 1.3.19. Se f (x) ∈ K[x] e α ∈ K `e tale che f (α) = 0, allora (x − α) | f (x). Dimostrazione. Dividendo f (x) per x − α si ha f (x) = q(x)(x − α) + r(x)

(1.22)

dove r(x) ha grado minore di x − α e dunque `e una costante r. Ponendo x = α in (1.22), si trova r = 0. ⊓ ⊔ Corollario 1.3.20. Se f (x) ∈ K[x] `e un polinomio non nullo di grado n, esso ha al pi` u n radici in K. Dimostrazione. Se α1 , . . . , αh sono radici distinte di f (x), il Teorema di Ruffini implica che f (x) `e divisibile per il polinomio (x−α1 ) · · · (x−αh ) di grado h e dunque n ≥ h. ⊔ ⊓ Dato un polinomio f (x) ∈ K[x], possiamo considerare la funzione ϕf : x ∈ K → f (x) ∈ K, detta funzione polinomiale determinata da f (x). Proposizione 1.3.21. Se K `e infinito, e se f (x), g(x) sono polinomi su K, allora f (x) = g(x) se e solo se ϕf = ϕg . Dimostrazione. Si ha ϕf = ϕg se e solo se ogni α ∈ K `e radice del polinomio f (x) − g(x). Per il Corollario 1.3.20 ci` o accade se e solo se f (x) − g(x) = 0 e quindi se e solo se f (x) = g(x). ⊔ ⊓ Definizione 1.3.22. Una radice α ∈ K di f (x) ∈ K[x] si dice semplice se (x − a m se (x − α)m | f (x), ma α) | f (x) ma (x − α)2 ∤ f (x). Si dice di molteplicit` a m > 1 si dice radice multipla. (x − α)m+1 ∤ f (x). Una radice con molteplicit` Ad esempio −1 `e una radice di molteplicit` a 2 ovvero, come si dice anche, una radice doppia del polinomio (x + 1)2 . Dato un polinomio f (x) = a0 + a1 x + a2 x2 + a3 x3 + · · · + an xn su un campo K, si definisce polinomio derivato f ′ (x), e si indica anche con D(f (x)), il polinomio f ′ (x) = a1 + 2a2 x + 3a3 x2 + · · · + nan xn−1 . Ad esempio se

f (x) = 4x4 + 6x3 − 5x2 + x − 1

`e un polinomio a coefficienti reali, allora

f ′ (x) = 16x3 + 18x2 − 10x + 1. La derivata `e un’applicazione D : K[x] → K[x] che soddisfa le seguenti propriet` a (cfr. Esercizi A1.58 e A1.59):

(1.23)

28 • •

1 Qualche richiamo sui numeri linearit` a : D(f (x) + g(x)) = D(f (x)) + D(g(x)), per ogni coppia di polinomi f (x), g(x) ∈ K[x]; regola di Leibnitz : D(f (x) · g(x)) = D(f (x)) · g(x) + D(g(x)) · f (x), per ogni coppia di polinomi f (x), g(x) ∈ K[x].

La composizione h ≥ 2 volte della derivata applicata ad un polinomio f (x) si indica col simbolo f (h) (x), o D(h) (f (x)), e si dice derivata h-esima di f (x). Si a in K[x]. conviene di porre D(1) = D mentre D(0) `e l’applicazione identit` Notiamo che si ha D(i) (xn ) = 0 se i > n , sicch´e D(i) (f (x)) = 0 se i `e maggiore del grado di f (x) (cfr. Esercizio A1.61). Inoltre dall’identit` a di Leibnitz, segue che, se c ∈ K e se i ≤ n, si ha D(i) ((x − c)n ) = n(n − 1) · · · (n − i + 1)(x − c)n−i ; in particolare si ha

D(n) ((x − c)n ) = n!

(1.24) (1.25)

(cfr. Esercizio A1.62). La seguente proposizione mette in relazione la nozione di derivata con la molteplicit` a di una radice di un polinomio. Ricordiamo che con il simbolo m! si intende il fattoriale del numero intero m (cfr. Esercizio A1.12). Proposizione 1.3.23. Se f (x) `e un polinomio sul campo K e se α ne `e una radice di molteplicit` a m, si ha (D(i) f )(α) = 0 per ogni i ≤ m − 1. Se inoltre m! = 0 in K, (m) si ha (D f )(α) = 0. Dimostrazione. Si ha f (x) = (x − α)m g(x) con g(α) = 0. Applicando reiteratamente la regola di Leibnitz, si trova D(i) (f (x)) =

i 

j=0

D(j) ((x − α)m )D(i−j) (g(x)).

Tenendo presente la (1.24), si ha (D(i) f )(α) = 0 per ogni i ≤ m − 1, mentre ⊔ ⊓ (D(m) f )(α) = m!g(α). Di qui l’asserto. Questo risultato offre un valido criterio per stabilire se un polinomio ha o meno radici multiple. Esempio 1.3.24. Risolviamo il seguente problema: determinare un polinomio a coefficienti reali f (x) = x3 − 3λ2 x + 2

avente una radice doppia. Si procede cos`ı. Affinch´e f (x) abbia una radice doppia α, essa deve anche essere radice della sua derivata f ′ (x) = 3x2 − 3λ2 , quindi α = ±λ. Perci` o deve essere (±λ)3 − 3λ2 (±λ) + 2 = 0, da cui segue λ3 = ±1 e pertanto λ = ±1. Il polinomio cercato `e f (x) = x3 − 3x + 2 e l’unica sua radice doppia `e α = ±λ = ±(±1) = 1.

1.3 L’algoritmo di Euclide

29

Proviamo, per finire, il seguente teorema che ci sar` a utile in seguito: Teorema 1.3.25 (Formula di Taylor). Sia f (x) = a0 + a1 x + · · · + an xn un polinomio su un campo K = Q, R o C. Se y `e ancora una indeterminata su K, possiamo considerare il polinomio in due variabili f (x + y) su K. Per esso si ha la seguente formula, detta formula di Taylor: n

f (x + y) = f (x) + f ′ (x)y +

f (n) (x) n  f (i) (x) i f (2) (x) 2 y + ··· + y = y. 2 n! i! i=0

(1.26)

Inoltre, per ogni i = 1, . . . , n, si ha ai =

f (i) (0) . i!

(1.27)

Dimostrazione. L’ultima parte dell’asserto segue dalla prima scambiando x con y e ponendo poi y = 0. Quanto alla prima, si noti che la formula di Taylor `e lineare, cio`e se `e vera per due polinomi f (x) e g(x) `e pure vera per una loro combinazione lineare αf (x) + βg(x) a coefficienti costanti α, β. Inoltre la formula vale per le costanti. Per provarla per un polinomio qualunque basta allora provarla per i monomi del tipo xn . In questo caso la formula di Taylor non `e altro che la formula del binomio di Newton (cfr. Esercizio A1.18). ⊔ ⊓ La formula di Taylor si pu` o anche scrivere in modo un po’ diverso. Scelta una costante k ∈ K, si sostituisce nella formula x con k e y con x − k. Allora si ha f (x) = f (k) + f ′ (k)(x − k) + =

f (2) (k) f (n) (k) (x − k)2 + · · · + (x − k)n = 2 n!

n  f (i) (k) (x − k)i . i! i=0

Sotto questa veste la formula prende il nome di formula di Maclaurin, di punto iniziale k. Ad esempio, il polinomio reale f (x) = x3 + 2x − 1 si pu` o anche scrivere, applicando la formula di Maclaurin di punto iniziale 1, come f (x) = 2 + 5(x − 1) + 6(x − 1)2 + 6(x − 1)3 . Osservazione 1.3.26. Sia A un anello unitario. Si pu` o considerare l’applicazione f :Z→A cos`ı definita: se n `e un numero positivo, si definisce f (n) = 1 + · · · + 1, se n `e un    n

numero negativo, si definisce f (n) = −f (−n); inoltre si pone f (0) = 0. Di solito f (n) si denota con n. Si ha ovviamente

30

1 Qualche richiamo sui numeri f (n + m) = f (n) + f (m),

f (nm) = f (n)f (m).

Pertanto f (Z) `e un sottoanello di A detto sottoanello fondamentale, o primo, di A. Se f `e iniettiva si dice che A ha caratteristica zero e il sottoanello fondamentale di A si pu` o identificare con Z. Se A non ha caratteristica zero, allora esiste un minimo intero p > 1 tale che f (p) = 0. Esso si dice la caratteristica di A. Se A `e un dominio di integrit` a, allora p `e un numero primo, ossia non `e prodotto di due interi positivi minori di p. Infatti se p = nm con n, m interi positivi minori di p, si avrebbe 0 = f (p) = f (nm) = f (n)f (m) e dunque avremmo o f (n) = 0 oppure f (m) = 0, il che `e assurdo. La formula di Taylor vale non solo per polinomi su Q, R e C, ma pi` u in generale per polinomi su un campo di caratteristica zero. Cos`ı pure la condizione su K affinch´e valga l’ipotesi m! = 0 nella Proposizione 1.3.23 `e senz’altro soddisfatta se K ha caratteristica zero.

1.4 Contare in basi diverse Per operare coi numeri `e necessario rappresentarli in un modo semplice ed efficiente. Ci sono vari modi di farlo. In questo paragrafo trattiamo quello universalmente noto, usato da tutti noi fin dalle scuole elementari, ma anche dai computer, cio`e la rappresentazione dei numeri in una data base. Vedremo tuttavia nel prossimo paragrafo un altro modo suggestivo ed utile di rappresentare i numeri. 1.4.1 La rappresentazione posizionale dei numeri Quando scriviamo il numero 3013 in base 10, intendiamo la seguente espressione: 3013 = 3 · 103 + 0 · 102 + 1 · 101 + 3 · 100 . Nell’esempio `e evidente che una stessa cifra, ad esempio il 3, rappresenta numeri diversi a seconda della posizione che occupa nella scrittura del numero. Esso rappresenta infatti il numero 3, se 3 `e il coefficiente di 100 , e il numero 3000 se moltiplica 103 . Si tratta dunque di una scrittura posizionale in base 10, per la quale si utilizzano le 10 cifre da 0 a 9. Continuando nell’esame dell’esempio, notiamo che dividendo 3013 per 10 otteniamo 3013 = 10 · 301 + 3, cio`e 3, l’ultima cifra a destra, rappresenta il resto della divisione per 10 dell’intero numero. Proseguendo, dividiamo il quoziente ottenuto nuovamente per 10. Si ottiene 301 = 10 · 30 + 1.

1.4 Contare in basi diverse

31

Dunque la seconda cifra da destra, cio`e 1, rappresenta ancora il resto di una divisione, e quindi `e univocamente individuata. In definitiva, le cifre che appaiono nella rappresentazione decimale del numero sono univocamente individuate mediante divisioni successive. La scelta della scrittura di un numero in base 10 `e puramente convenzionale, tanto che nel corso dei secoli diverse civilt` a hanno usato basi diverse per la numerazione: i Babilonesi hanno usato la base 60, i Maya la base 20, ecc. I calcolatori usano la base 2, ossia utilizzano esclusivamente due cifre, 0 e 1, per rappresentare un numero. Infatti nel sistema binario, cio`e in base due, ogni cifra contiene un bit di informazione: il simbolo 0 `e interpretato dal calcolatore come il comando off e il simbolo 1 come on. Altre basi utilizzate nel campo dei calcolatori elettronici sono β = 8 e β = 16. Dunque, ai fini della numerazione, il ruolo svolto dal numero 10 pu` o essere svolto da un qualunque altro intero maggiore di 1. Ad esempio, scegliendo 9 come base, il numero 3 · 93 + 0 · 92 + 1 · 91 + 3 · 90 `e rappresentato in base 10 come 2199. Invece il numero 3013 `e rappresentato in base 9 da 4117. Il risultato teorico su cui si fonda la possibilit` a di numerare in base qualunque `e il seguente: Teorema 1.4.1. Sia β un intero maggiore o uguale a 2. Allora per ogni n ∈ N esistono un intero non negativo k e k +1 interi a0 , a1 , . . . , ak tali che 0 ≤ ai < β, per ogni i = 0, . . . , k e inoltre tali che n = ak β k + ak−1 β k−1 + · · · + a2 β 2 + a1 β + a0

(1.28)

e tale espressione `e unica. Dimostrazione. Applichiamo l’algoritmo delle divisioni nel modo seguente: dividiamo n per β ottenendo n = β · q0 + a0 ,

0 ≤ a0 < β.

Ora, se q0 = 0, dividiamo ancora q0 per β ottenendo q0 = β · q1 + a1 ,

0 ≤ a1 < β.

Proseguendo nello stesso modo si ha q1 = β · q2 + a2 , ... qs−2 = β · qs−1 + as−1 , qs−1 = β · qs + as ,

0 ≤ a2 < β, 0 ≤ as−1 < β, 0 ≤ as < β.

Poich´e n > q0 > q1 > · · · > qs ≥ 0 `e una successione di interi non negativi strettamente decrescente, essa necessariamente termina con zero. Sia k il primo intero per cui qk = 0.

32

1 Qualche richiamo sui numeri

Riscriviamo la lista delle relazioni dianzi ottenute: n = β · q0 + a0 , q0 = β · q1 + a1 ,

q1 = β · q2 + a2 , .. . qk−3 = β · qk−2 + ak−2 ,

qk−2 = β · qk−1 + ak−1 , qk−1 = β · 0 + ak ,

0 ≤ a0 < β, 0 ≤ a1 < β,

0 ≤ a2 < β,

0 ≤ ak−2 < β,

0 ≤ ak−1 < β, 0 ≤ ak < β.

Procediamo ora a ritroso sostituendo il valore qk−1 = ak , tratto dall’ultima equazione, nella penultima. Si trova qk−2 = β · ak + ak−1 . Sostituendo nella terz’ultima equazione si trova qk−3 = β · (β · ak + ak−1 ) + ak−2 = β 2 · ak + β · ak−1 + ak−2 . Continuando cos`ı fino alla prima equazione si ottiene infine l’espressione (1.28). L’unicit` a di tale espressione `e evidente, poich´e le cifre ai che vi appaiono sono univocamente determinate come i resti delle divisioni successive effettuate. ⊓ ⊔ In conclusione, ogni numero strettamente inferiore alla base β `e rappresentato da un unico simbolo o cifra. Per rappresentare un numero in base β occorrono β simboli diversi. Il numero che ha espressione (1.28) si indica di solito col simbolo (ak ak−1 . . . a1 a0 )β o anche semplicemente col simbolo ak ak−1 . . . a1 a0 , sottintendendo la base, quando non c’`e pericolo di confusione. 1.4.2 La base 2 Che relazione sussiste tra le scritture di uno stesso numero in basi diverse? Per capirlo basta tenere presente la dimostrazione del Teorema 1.4.1 che fornisce un algoritmo, fondato sulla divisione, per determinare la scrittura di un numero in base β. Ad esempio, per passare dalla base 10 alla base 2, basta dividere il numero dato per 2, e successivamente ogni quoziente che si ottiene ancora per due, fino ad arrivare ad un quoziente nullo. I resti cos`ı ottenuti, letti dal basso all’alto, danno la rappresentazione in base 2 del numero dato. Supponiamo ad esempio di volere scrivere il numero 8112 in base 2: 8112 = 2 · 4056 + 0, 4056 = 2 · 2028 + 0,

r0 = 0, r1 = 0,

507 = 2 · 253 + 1,

r4 = 1,

2028 = 2 · 1014 + 0, 1014 = 2 · 507 + 0,

r2 = 0, r3 = 0,

1.4 Contare in basi diverse

253 = 2 · 126 + 1, 126 = 2 · 63 + 0, 63 = 2 · 31 + 1, 31 = 2 · 15 + 1, 15 = 2 · 7 + 1, 7 = 2 · 3 + 1, 3 = 2 · 1 + 1,

1 = 2 · 0 + 1,

33

r5 = 1, r6 = 0, r7 = 1, r8 = 1, r9 = 1, r10 = 1, r11 = 1, r12 = 1.

Ebbene, il numero che si scrive come 8112 in base 10, in base 2 si scrive (8112)10 = (r12 r11 r10 r9 r8 r7 r6 r5 r4 r3 r2 r1 r0 )2 = (1111110110000)2 . Per fare l’operazione inversa, cio`e per passare da base 2 a base 10, basta svolgere le somme e le potenze. Per esempio, per ripassare dal numero (1111110110000)2 alla sua rappresentazione decimale, basta scrivere (1111110110000)2 = 1 · 212 + 1 · 211 + 1 · 210 + 1 · 29 + 1 · 28 + 1 · 27 +

+ 0 · 26 + 1 · 25 + 1 · 24 + 0 · 23 + 0 · 22 + 0 · 21 + 0 · 20 =

= 212 + 211 + 210 + 29 + 28 + 27 + 25 + 24 = 8112

utilizzando, nello sviluppo delle potenze di 2, le 10 cifre da 0 a 9. Osserviamo che la scrittura 10, in qualunque base, rappresenta la base, poich´e (1 0)β = 1 · β + 0 · β 0 = β. 1.4.3 Le quattro operazioni in base 2 La scrittura posizionale in base 10 ha costituito un notevole progresso rispetto a numerazioni non posizionali, ad esempio quella romana, nelle quali fare i conti non era semplice. Il sistema binario fornisce una ulteriore semplificazione in questo senso. Vediamo perch´e. Presentiamo le regole fare le quattro operazioni rappresentando i numeri in base 2. Il Lettore vedr`a che non ci sono troppe differenze col caso, ben noto fin dalle scuole elementari, dei calcoli fatti in base 10. D’altra parte lavorare in base 2 `e particolarmente semplice e inoltre `e utile e istruttivo, perch´e, come abbiamo gi` a detto, `e cos`ı che funzionano i calcolatori. Notiamo che 1 + 1 = 2 si scrive 1 + 1 = 10 in base 2. Dunque le tabelline che dobbiamo ricordare per addizionare numeri in base 2 sono molto semplici: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 1 0.

34

1 Qualche richiamo sui numeri

Siano a =

n

i=0

ai · 2i e b =

n

a+b=

i=0 bi n  i=0

· 2i due interi positivi. Allora

(ai + bi ) · 2i .

Se vogliamo la scrittura in base 2, dobbiamo procedere nel modo seguente. Supponiamo che ai + bi sia il coefficiente con indice pi` u basso diverso da 0 o 1. Questo vuole dire che ai = bi = 1. A questo punto usiamo la tabellina e ricordiamo che 1 + 1 = 10. Ci` o significa che il termine (ai + bi ) · 2i = 2 · 2i = 2i+1 e perci`o dobbiamo riportare 1 nel coefficiente successivo e cio`e il coefficiente di 2i+1 diventa ai+1 + bi+1 + 1 mentre il coefficiente di 2i `e 0. Si continua cos`ı per gli indici successivi. Facciamo un esempio per illustrare la procedura. Supponiamo di dovere addizionare i due numeri 10111111 e 1011: riporti

111111 10111111+ 1011= 11001010

Ricordiamo che i termini delle colonne rappresentano i coefficienti delle potenze di 2, crescenti a partire da destra e a cominciare da 20 . In questo caso a0 = b0 = 1 e a1 = b1 = 1, dunque il coefficiente di 20 diventa 0 e il coefficiente di 2 diventa (1 + 1) + 1 = 21 + 20 e allora il coefficiente di 21 `e 1 mentre quello di 22 diventa a2 + b2 + 1 = (1 + 0) + 1, cos`ı come indicato nella tabella. Iterando l’argomento, scriviamo zero per il coefficiente di 22 , e riportiamo uno, cio`e aggiungiamo uno, al coefficiente successivo, e cos`ı via. Per curiosit` a i due numeri che stiamo sommando sono rispettivamente, in base 10, i numeri 191 e 11 la cui somma `e 202, che corrisponde al risultato ottenuto in base 2. Nello stesso modo, se a=

n  i=0

i

ai · 2 ,

e a ≥ b, allora a−b=

n  i=0

b=

n  i=0

bi · 2i

(ai − bi ) · 2i .

Qui si pone il problema di far diventare tutti i coefficienti della suddetta somma 0 o 1. Il problema ovviamente sorge se per qualche i risulta ai = 0 e bi = 1. In questo caso, guardando la riga che rappresenta a ci facciamo prestare un 1 dal primo 1 che incontriamo muovendoci verso sinistra a partire da ai . Facciamo un esempio, con a = 33 = 25 + 1 · 20 = (1 0 0 0 0 1)2 , b = 10 = 23 + 1 · 21 = (1 0 1 0)2 .

1.4 Contare in basi diverse

35

Allora a − b = 25 − 23 − 21 + 20 = 25 − 23 − 22 + (2 − 1) · 21 + 20 = = 25 − 23 − 22 + 1 · 21 + 20 =

= 25 − 23 − 23 + 23 − 22 + 21 + 20 =

= 25 − 23 − 23 + (2 − 1) · 22 + 21 + 20 =

= 25 − 2 · 23 + 1 · 22 + 21 + 20 = 25 − 24 + 22 + 21 + 20 =

= (2 − 1) · 24 + 22 + 21 + 20 = 24 + 22 + 21 + 20 = = (1 0 1 1 1)2

che rappresenta in base 2 il numero 23. Vediamo operativamente come si procede con la sottrazione degli stessi numeri: • a0 − b0 = 1 − 0 = 1, quindi possiamo scrivere 1 sotto la prima colonna da destra: 100001− 1010= 1 • osserviamo ora che a1 − b1 = 0 − 1 `e negativo: dobbiamo allora procedere con i “prestiti”. Il primo 1 che incontriamo andando verso sinistra `e il coefficiente di 25 . Dobbiamo spostare il coefficiente 1 verso destra, fino a portarlo sopra la seconda colonna da destra, tenendo presente che per ogni i si ha 2i = 2i−1 + 2i−1 . Si procede allora con i seguenti passi: 1.

prestiti

1 110001− 1010= 1

2.

prestiti  1 1 011001− 1010= 1

3.

prestiti

11 011101− 1010= 1

4.

prestiti

11 011111− 1010= 1

36

1 Qualche richiamo sui numeri

In definitiva, prestiti

1 011111− 1010=

10111 e quindi il risultato della sottrazione `e 10111 . Osservazione 1.4.2. In realt` a i calcolatori trasformano ogni operazione di sottrazione in una addizione attraverso un metodo che prende il nome di complemento a due. Per illustrare il procedimento facciamo un passo indietro. Riportiamo nella seguente tabella i numeri interi da 0 a 15 scritti in base 2. base 10 base 2 base 10 base 2 0 1 2 3 4 5 6 7

0000 0001 0010 0011 0100 0101 0110 0111

8 9 10 11 12 13 14 15

1000 1001 1010 1011 1100 1101 1110 1111

(1.29)

Facciamo notare che per rappresentarli tutti ci servono 4 bits, dove ogni bit rappresenta un simbolo: 0 o 1. Osserviamo che nella tabella precedente abbiamo aggiunto degli zeri iniziali, cio`e a partire da sinistra, per riempire tutte le 4 posizioni disponibili. Con cinque bits possiamo rappresentare i numeri fino a 31 = 32 − 1 = 25 − 1. In generale con n bits si possono rappresentare tutti i numeri interi positivi a, a con 0 ≤ a < 2n . Le informazioni vengono immagazzinate nel computer in unit` di 8 bits che si chiamano bytes; quindi una macchina con unit` a di memoria pari ad un byte pu` o rappresentare in una singola cella un qualunque numero intero tra o rappresentare 0 e 28 − 1 = 255, mentre una macchina con celle da due bytes pu` in una singola cella numeri di cifre binarie fino a 216 − 1 = 65535. E infine una macchina con celle da 4 bytes pu` o arrivare a scrivere in una singola cella numeri fino a 232 − 1 = 4.294.967.295. Nella rappresentazione con n bits, aggiungeremo tutti gli zeri necessari a partire da sinistra per riempire tutti i posti disponibili. Per riprendere il discorso su come operativamente il computer fa la sottrazione, trasformandola in un’addizione, il punto cruciale `e la lunghezza massima della stringa che il computer vede, cio`e ha a disposizione, per rappresentare gli interi. In altre parole, se la lunghezza massima `e 4, il numero 10001 viene letto come 0001 cio`e il computer dimentica tutti i coefficienti dei termini del tipo 2h , con h ≥ 4, e, ad esempio, legge il numero 17 = (10001)2 come 1. Supponiamo che il computer abbia celle da 4 bits e che vogliamo sottrarre b = 0111 da a = 1001. Eseguiamo i seguenti passi:

1.4 Contare in basi diverse • • •

37

complemento a 1: scambiamo 1 con 0 e viceversa nelle cifre della rappresentazione binaria di b, ottenendo b′ = 1000; complemento a 2: aggiungiamo il numero 0001 a b′ , ottenendo b′′ = 1001; somma: sommiamo b′′ = 1001 ad a = 1001.

Chiameremo b′′ l’opposto di b. Ma attenzione! Questo non `e il vero opposto di b, cio`e −b. Tuttavia per il computer `e come se lo fosse, poich´e il computer legge le cifre solo fino alla quarta. Dunque b′′ + b = 1001 + 0111 = 1|0000 che il computer legge come 0000. Nell’esempio, facendo la differenza fra a e b come abbiamo visto prima, otteniamo 1001− 0111= 0010 Usando il metodo del computer, cio`e il complemento a due, dobbiamo calcolare a+b′′ ottenendo 1001+ 1001= 10010

che `e il risultato giusto perch´e, come abbiamo gi` a osservato, il numero 1 iniziale, che abbiamo sbarrato, non esiste per il computer! Spieghiamo da un punto di vista teorico perch´e le cose funzionano. Siano a, b interi positivi con a ≥ b ed a, b entrambi minori di 2n . Si ha a − b + 2n = a + ((2n − 1) − b + 1). Poich´e 2n = (1 0 . . . 0), stringa di lunghezza n + 1, e 2n − 1 = (1 1 . . . 1 1), stringa di lunghezza n, allora b′ , il complemento a 1 di b, `e (2n − 1) − b = (1 1 . . . 1 1) − b e quindi b′′ , l’opposto di b `e (2n − 1) − b + 1 = 2n − b. Pertanto abbiamo a + b′′ = 2n + a − b che il computer legge come a − b se usa una cella a n bits.

Veniamo ora alla moltiplicazione. Questa si riduce facilmente all’addizione in virt` u della seguente semplice osservazione. Se abbiamo il numero a=

n  i=0

allora 2j · a =

ai · 2i ,

n  i=0

ai · 2i+j ,

cio`e 2j · a si scrive spostando a sinistra di j posti le cifre di a e facendole seguire da altrettanti 0. D’altra parte, supponiamo di avere i due numeri

38

1 Qualche richiamo sui numeri

a=

n  i=0

ai · 2i ,

b=

m  j=0

bj · 2j .

Supponiamo che le cifre di b non nulle, e quindi uguali a 1, siano solo le h cifre bj1 , · · · , bjh , cio`e sia h  2jl . b= l=1

Pertanto abbiamo

a·b=

h  n  l=1 i=0

(ai · 2i+jl ).

In definitiva quindi fare il prodotto di a e b si riduce a fare la somma degli h numeri ottenuti da a spostandone le cifre a sinistra di bj1 , . . . , bjh posti e aggiungendo altrettanti 0 a destra. Questi 0 di solito non si scrivono neanche: ci si limita a incolonnare e sommare i numeri ottenuti spostando la scrittura di a opportunamente a sinistra. Ad esempio 11101× 1101= 11101 11101- 11101- - -

(1.30)

101111001 Il Lettore `e invitato a verificare la correttezza di questo calcolo effettuandolo anche in base 10 (cfr. Esercizio B1.56). Infine per quel che concerne la divisione, si procede con lo stesso metodo ben noto nel caso in base 10, con la facilitazione che qui le divisioni successive che si devono operare risultano assai facili in quanto i quozienti successivi sono 1 o 0, mentre i resti si calcolano con sottrazioni procedendo come descritto dianzi. Ad esempio, si considerino a = 30 = (11110)2 e b = 4 = (100)2 . Scriviamo i passaggi per calcolare il quoziente e il resto della divisione di a per b: 11110100 100 111 111 100 110 100 10 Analogamente, siano a = 26 = (11010)2 e b = 5 = (101)2 . La divisione di a per b `e

1.4 Contare in basi diverse

39

11010101 101 101 110 101 1 Osservazione 1.4.3. La scrittura di un numero in base 2, a fronte della facilit` a con cui si eseguono le operazioni, richiede per contro pi` u spazio che non quella in una base maggiore, ad esempio nella familiare base 10. Per ovviare a questo inconveniente si procede, usando la tabella (1.29), nel modo seguente: si considera l’insieme, costituito da 16 elementi, di tutte le stringhe formate da 4 cifre appartenenti a {0, 1}. Ognuna di queste stringhe rappresenta un numero in base 2 come indicato nella (1.29). Se poniamo 1010 = A, 1011 = B, 1100 = C, 1101 = D, 1110 = E e 1111 = F , abbiamo 16 simboli 0, . . . , 9, A, B, C, D, E, F che possiamo prendere come cifre di un sistema esadecimale. Il passaggio da un numero scritto in base 2 ad uno scritto in base 16 `e molto semplice: basta suddividere il numero binario, a partire da destra, in gruppi di quattro cifre (quattro bits = mezzo byte, dato che 1 byte corrisponde a 8 bits). Diamo un esempio: (1000    1101   )2 = (8ED61)16 =    0110    0001    1110 8

E

6

D

1

= 8 · (16)4 + 14 · (16)3 + 13 · (16)2 + 6 · 16 + 1 = (585057)10 .

Se si vuole invece passare da un sistema binario ad un sistema a base 8 basta raggruppare le cifre a tre a tre, partendo da destra.

1.4.4 Numeri interi in base qualunque Tornando ad una base qualunque, notiamo, senza insistere troppo su cose ormai ovvie e rinviando agli esercizi in appendice, che anche qui si possono facilmente effettuare le quattro operazioni fondamentali tra numeri. Basta conoscere le tavole di addizione e moltiplicazione dei numeri ad una sola cifra e seguire le ordinarie regole dei riporti messe in evidenza nel caso della base 2. Ecco le tavole additive e moltiplicative in base 3: 2

·

0 1

2

1

2

0

0 0

0

2

10

1

0 1

2

2 10 11

2

0 2 11

+ 0

1

0

0

1

1

2

Per fare ad esempio (221)3 + (12)3 basta procedere al modo seguente. Si fa 1 + 2 = 1 0, quindi si scrive 0 e si riporta 1. Poi si fa 1 + 2 + 1 = 1 1. Si scrive 1 e si riporta 1. Infine 1 + 2 = 1 0. In definitiva, si ha

40

1 Qualche richiamo sui numeri

11 221+ 12 1010 Analogamente nel caso della moltiplicazione. Ad esempio il Lettore potr` a verificare che (221)3 · (12)3 = (11122)3 . 1.4.5 Rappresentazione dei numeri reali in base qualunque Non solo i numeri interi ma pi` u in generale i numeri reali si possono rappresentare in una fissata base β. Vale infatti il seguente risultato: Teorema 1.4.4. Sia a un numero reale tale che 0 ≤ a < 1 e sia β > 1 un intero. Allora a si pu` o scrivere come somma di una serie a=

∞  ci i β i=1

(1.31)

dove i coefficienti sono interi ci tali che 0 ≤ ci ≤ β − 1. Tale serie `e unica se si impone che per ogni intero positivo m vi sia un intero n ≥ m tale che cn = β − 1. Dimostrazione. Suddividendo l’intervallo [0,1] in β parti uguali, si vede che esiste un unico intero c1 tale che c1 + 1 c1 ≤a< . β β Suddividendo ancora l’intervallo [c1 /β, (c1 + 1)/β] in β parti uguali, si vede che esiste un unico intero c2 tale che c2 c2 + 1 c1 c1 + 2 ≤a< + . β β β β2 Iterando questo procedimento si perviene all’esistenza della serie in (1.31). Quanto all’unicit` a, la procedura che abbiamo test´e indicata `e ovviamente unica e non pu` o portare ad una serie per cui esista un intero positivo m tale che cm−1 < β − 1 e per ogni n ≥ m si abbia cn = β − 1 . Infatti, tenendo presente che ∞  1 β , = i β β − 1 i=0 si avrebbe in tal caso a= =

∞ m−1 ∞ m−1 ∞   ci   ci ci β−1 β−1 1 = + = + = βi β i i=m β i βi β m i=0 β i i=1 i=1 i=1

m−1  i=1

ci 1 + m−1 . i β β

1.4 Contare in basi diverse

41

Pertanto con la procedura dianzi indicata la serie ottenuta sarebbe a=

m−2  i=1

e non a=

m−1  i=1

ci cm−1 + 1 + i β β m−1 ∞  β−1 ci + . β i i=m β i

⊓ ⊔

Il precedente teorema consente di scrivere i numeri reali in base β. Infatti, se a `e un qualunque numero reale positivo, la sua parte intera [a], definita come l’unico intero x tale che x ≤ a < x + 1, si scrive in base β come (ak ak−1 . . . a1 a0 )β . Inoltre al numero reale a − [a], che `e compreso tra 0 e 1, si applica il teorema precedente, e si conviene di scriverlo come a − [a] = (0, c1 c2 c3 . . .)β . In definitiva si scrive poi a = (ak ak−1 . . . a1 a0 , c1 c2 c3 . . .)β , o semplicemente come a = ak ak−1 . . . a1 a0 , c1 c2 c3 . . . , sottintendendo la base β se non vi `e pericolo di confusione. Tale scrittura `e unica se soddisfa le condizioni del Teorema 1.4.4. Quanto al fenomeno della mancanza, in generale, dell’unicit` a della scrittura (1.31), si noti che ad esempio in base 10 si ha 1 = 0, 9999 . . . Le considerazioni che precedono si applicano in particolare ai numeri razionali, cio`e agli elementi del campo Q. Ricordiamo che gli elementi di Q sono le frazioni, ossia si scrivono come n/m con n, m interi, m = 0. Ovviamente si potr` a sempre supporre che M CD(n, m) = 1, e in tal caso la frazione n/m si dice ridotta. Segnaliamo il seguente fatto, che `e immediata conseguenza del Corollario 1.3.9, e che si lascia per esercizio al Lettore (cfr. Esercizio A1.70): Lemma 1.4.5. Se n/m e n′ /m′ sono frazioni ridotte uguali, allora n `e associato a n′ e m lo `e a m′ . Faremo qui brevemente alcune considerazioni sulla rappresentazione in una fissata base β di un numero razionale. I Lettori pi` u attenti vi ritroveranno nozioni studiate, in relazione alla base 10, nelle scuole inferiori. Per cominciare, un numero a che si scrive come ak ak−1 . . . a1 a0 , c1 c2 c3 . . . in base β lo diciamo β–definito, o semplicemente definito, se esiste un intero positivo m tale che ci = 0 per ogni i ≥ m. In tal caso si scrive semplicemente a = ak ak−1 . . . a1 a0 , c1 c2 c3 . . . cm . Le cifre c1 c2 c3 . . . cm si dicono la β–mantissa, o semplicemente la mantissa, di ` chiaro che un numero definito `e razionale. Non `e vero per` a. E o che ogni numero razionale `e definito. Vale infatti la seguente proposizione di cui lasciamo la facile dimostrazione al Lettore (cfr. Esercizio A1.71).

42

1 Qualche richiamo sui numeri

Proposizione 1.4.6. Un numero razionale a `e β–definito se e solo se si pu` o scrivere come a = n/m, con m divisore di una potenza di β con esponente intero non negativo. Resta dunque il problema di capire come `e fatta la rappresentazione in base β dei numeri razionali in generale, in particolare di quelli non β–definiti, o, come si dice β–indefiniti, o semplicemente indefiniti . Diamo qualche definizione. Dato a = ak ak−1 . . . a1 a0 , c1 c2 c3 . . ., esso si dice β– periodico, o semplicemente periodico, se esistono interi m ≥ 0 e h ≥ 1 tali che per ogni intero positivo n e per ogni i = 1, . . . , h si ha cm+nh+i = cm+i . In altri termini, dopo le cifre c1 , . . . , cm , appaiono le cifre cm+1 , . . . , cm+h le quali successivamente si ripetono periodicamente, ossia a − [a] = 0, c1 . . . cm cm+1 . . . cm+h cm+1 . . . cm+h . . . cm+1 . . . cm+h . . . che pi` u brevemente si scrive a − [a] = 0, c1 . . . cm cm+1 . . . cm+h . Le cifre cm+1 . . . cm+h si dicono costituire il periodo di a = ak ak−1 . . . a1 a0 , c1 c2 c3 . . ., le cifre c1 . . . cm si dicono costituire l’antiperiodo. Se m = 0, ossia se non vi `e antiperiodo, a si dice periodico semplice, altrimenti si dice periodico misto. Ora torniamo al problema di capire come `e fatta la rappresentazione in base β dei numeri razionali. A tale scopo ci possiamo ovviamente ridurre a considerare numeri nell’intervallo (0, 1). Il problema `e completamente risolto dal seguente risultato: Proposizione 1.4.7. Sia a un numero reale tale che 0 < a < 1. Il numero a `e razionale se e solo se ` e β–periodico. Precisamente, si ha a = 0, c1 . . . cm cm+1 . . . cm+h se e solo se a=

(c1 . . . cm cm+1 . . . cm+h )β − (c1 . . . cm )β , (β − 1, . . . , β − 1, 0, . . . , 0)β       m

h

ossia β −1 `e ripetuto h volte, cio`e un numero di volte pari alla lunghezza del periodo, e 0 `e ripetuto m volte, cio`e un numero di volte pari alla lunghezza dell’antiperiodo. In generale, se a = ak ak−1 . . . a0 , c1 . . . cm cm+1 . . . cm+h , si ha a = ak ak−1 . . . a0 +

(c1 . . . cm cm+1 . . . cm+h )β − (c1 . . . cm )β (β − 1, . . . , β − 1, 0, . . . , 0)β       h

m

e quest’ultima `e detta frazione generatrice di a. Ad esempio, il numero periodico scritto in base 10 come 107, 45510 `e il numero razionale

1.5 Frazioni continue 107 +

43

45055 45510 − 455 = 107 + . 99000 99000

Quanto alla dimostrazione della proposizione, essa viene posposta al Capitolo 4 (cfr. § 4.3), dove si daranno ulteriori informazioni sulla struttura del periodo di un numero razionale in una data base.

1.5 Frazioni continue Un’applicazione molto significativa dell’algoritmo euclideo `e data dalle cosiddette frazioni continue. Esse forniscono, in sostanza, anche un modo alternativo di rappresentare i numeri reali. In questo paragrafo studieremo questo argomento e vedremo il loro legame con la soluzione delle equazioni lineari diofantee. Le ritroveremo in seguito in problemi di fattorizzazione di interi. Partiamo dai due interi a = 214 e b = 35. Applicando l’algoritmo euclideo a tali numeri si ottiene 214 = 35 · 6 + 4, 35 = 4 · 8 + 3, 4 = 3 · 1 + 1, 3 = 1 · 3 + 0.

(1.32) (1.33) (1.34) (1.35)

Dividiamo ora primo e secondo membro di (1.32) per 35. Otteniamo 214 4 =6+ . 35 35

(1.36)

Abbiamo cos`ı una prima informazione: il numero razionale 214/35 si trova tra 6 e 7, dato che 0 < 4/35 < 1. Scrivendo 4/35 come inverso di un numero maggiore di 1, la formula (1.36) diventa 1 214 =6+ . 35 35 4

(1.37)

Proseguiamo ora dividendo per 4 la formula (1.33): 3 35 =8+ 4 4

(1.38)

e riscriviamola nella forma

1 35 =8+ . 4 4 3 Infine, dividendo la (1.34) per 3 si ottiene

(1.39)

44

1 Qualche richiamo sui numeri

1 4 =1+ . 3 3 Abbiamo cos`ı ottenuto la seguente espressione per 214/35: 214 =6+ 35

1

.

1

8+

1+

1 3

Essa prende il nome di sviluppo di 214/35 in frazione continua. Lo sviluppo di un numero razionale in frazione continua potrebbe sembrare una semplice curiosit`a, anche se interessante: in realt` a essa fornisce in modo naturale delle approssimazioni semplici ed efficaci del numero razionale dal quale siamo partiti. Ad esempio, nel nostro caso le due frazioni 6,

6+

49 1 = = 6,125, 8 8

approssimano abbastanza bene il numero razionale 214/35 = 6,1142857. Cosa significhi “abbastanza bene” lo vedremo in seguito. Facciamo un altro esempio. Esempio 1.5.1. Trovare l’espressione di 17/7 sotto forma di frazione continua. L’algoritmo euclideo `e il seguente: 17 = 7 · 2 + 3,

7 = 3 · 2 + 1, 3 = 1 · 3 + 0,

da cui si ottiene

17 3 7 1 =2+ , =2+ , 7 7 3 3 quindi lo sviluppo di 17/7 in frazione continua `e 17 =2+ 7

1 1 2+ 3

.

Le frazioni che approssimano 17/7 sono le seguenti 2,

2+

5 1 = = 2,5, 2 2

mentre il valore esatto di 17/7 `e 2,428571.

1.5 Frazioni continue

45

1.5.1 Frazioni continue semplici finite e numeri razionali Abbiamo visto un esempio di frazione continua associata a un numero razionale. Formalizzando quanto visto diamo la seguente definizione: Definizione 1.5.2. Si dice frazione continua finita una frazione della forma 1

a1 +

(1.40)

1

a2 + a3 +

1 . a4 + . .

1 an−1 +

1 an

con a1 , a2 , . . . , an numeri reali, tutti positivi, ad eccezione al pi` u di a1 . I numeri a2 , . . . , an si chiamano denominatori parziali, o quozienti parziali, della frazione. Una frazione finita continua si dice semplice se tutti i suoi quozienti parziali sono interi. Noi ci occuperemo per lo pi` u di frazioni continue semplici. ` ovvio che una qualunque frazione continua finita semplice `e un numero E razionale. Viceversa, dato che l’algoritmo euclideo si pu` o applicare a due interi a e b qualunque, b = 0, si capisce, anche tenendo conto dell’esempio fatto dianzi, che un qualunque numero razionale si deve poter espandere sotto forma di frazione continua semplice finita. Questo `e il contenuto della seguente proposizione. Proposizione 1.5.3. Una qualunque frazione continua semplice finita `e uguale ad un numero razionale. Viceversa, un qualunque numero razionale si pu` o scrivere come frazione continua semplice finita. Dimostrazione. La prima parte `e ovvia. Sia ora a/b il numero razionale, b > 0. Applichiamo l’algoritmo di Euclide per trovare il M CD tra a e b: a = ba1 + r1 , b = r1 a2 + r2 ,

0 < r1 < b, 0 < r2 < r1 ,

r1 = r2 a3 + r3 , .. .

0 < r3 < r2 ,

ri = ri+1 ai+2 + ri+2 , .. . rn−3 = rn−2 an−1 + rn−1 ,

0 < ri+2 < ri+1 ,

rn−2 = rn−1 an + rn , rn−1 = rn an+1 + 0.

0 < rn < rn−1 ,

0 < rn−1 < rn−2 ,

46

1 Qualche richiamo sui numeri

Dato che i resti sono tutti positivi, anche tutti i quozienti ai , ad eccezione eventualmente del primo, saranno positivi. Riscriviamo le equazioni dell’algoritmo euclideo dividendo la prima per b, la seconda per r1 , la terza per r2 , e cos`ı via, fino all’ultima per rn . Avremo a r1 1 = a1 + = a1 + , b b b r1 b r2 1 = a2 + = a2 + , r1 r1 r1 r2 r1 r3 1 , = a3 + = a3 + r2 r2 r2 r3 r4 1 r2 , = a4 + = a4 + r3 r3 r3 r4 .. . rn−1 = an+1 . rn I primi membri delle precedenti uguaglianze sono dei numeri razionali, che abbiamo scritto come somma di un intero e di una frazione con numeratore 1. Con eliminazioni successive si ottiene 1 1 a = a1 + = a1 + , b b 1 a2 + r1 r1 r2 da cui 1 1 1 a , = a1 + = a1 + = a1 + b b 1 1 a2 + a2 + r1 r1 1 a3 + r2 r2 r3 fino ad arrivare all’espressione a = a1 + b

1

.

1

a2 + a3 +

1 . a4 + . .

1 an−1 +

1 an

1.5 Frazioni continue

47

Abbiamo cos`ı rappresentato il numero razionale a/b come una frazione continua finita semplice. ⊓ ⊔ La scrittura (1.40) `e, da un punto di vista tipografico, alquanto ingombrante, per cui si preferisce indicare la stessa frazione continua cos`ı: [a1 ; a2 , a3 , . . . , an ], ossia come successione finita dei suoi quozienti parziali. Ad esempio, la frazione dell’esempio fatto dianzi si scrive 214 = [6; 8, 1, 3]. 35 Si osservi che l’intero iniziale a1 sar` a zero se e solo se la frazione `e positiva e minore di 1. Inoltre osserviamo che a1 `e il valore intero approssimante per difetto a/b, cio`e a1 = [a/b], a2 `e il valore approssimante per difetto b/r1 , cio`e a2 = [b/r1 ], in generale   ri−2 ai = . ri−1 Osservazione 1.5.4. La rappresentazione di un razionale come frazione continua semplice finita non `e unica. Infatti, una volta trovata la rappresentazione nel modo visto, si pu` o sempre modificare l’ultimo termine. Infatti, se l’ultimo termine an `e maggiore di 1, si pu` o scrivere an = (an − 1) + 1 = (an − 1) +

1 1

con an − 1 positivo, e quindi [a1 ; a2 , a3 , . . . , an−1 , an ] = [a1 ; a2 , . . . , an−1 , an − 1, 1]. Se invece l’ultimo termine an `e uguale ad 1, allora [a1 ; a2 , a3 , . . . , an ] = [a1 ; a2 , a3 , . . . , an−2 , an−1 + 1]. ` facile verificare che questa `e l’unica indeterminazione nel modo di scriveE re una frazione continua (cfr. Esercizio A1.73). Quindi ogni numero razionale si pu`o scrivere come frazione continua semplice finita esattamente in due modi: in uno l’ultimo quoziente parziale `e 1, nell’altra `e maggiore di 1. Esempio 1.5.5. Scrivere il rapporto fn /fn−1 di due numeri di Fibonacci consecutivi come frazione continua. Dalle relazioni fn = fn−1 · 1 + fn−2 ,

fn−1 = fn−2 · 1 + fn−3 , .. . f3 = f2 · 2 + 0,

0 < fn−2 < fn−1 , 0 < fn−3 < fn−2 ,

48

1 Qualche richiamo sui numeri

si ottiene fn fn−1 fn−1 fn−2

fn−2 1 =1+ , fn−1 fn−1 fn−2 fn−3 1 , =1+ =1+ fn−2 fn−2 fn−3 =1+

.. . f3 = 2 + 0, f2 da cui fn fn−1

1

=1+ 1+ 1+

ossia

,

1 1 . 1 1 + .. 2

fn = [1; 1, 1, 1, . . . , 1, 2] = [1; 1, 1, 1, . . . , 1].       fn−1 n−2

n−1

1.5.2 Frazioni continue semplici infinite e numeri irrazionali Abbiamo appena visto che tutti e soli i numeri razionali si rappresentano come frazioni continue semplici finite. L’interesse principale delle frazioni continue `e per`o legato alla loro applicazione nella rappresentazione dei numeri irrazionali. Per far questo ci serviranno le frazioni continue semplici infinite. Apriamo una piccola parentesi storica. Studi di frazioni continue si trovano nella matematica indiana del sesto e del dodicesimo secolo per risolvere equazioni lineari. Fibonacci nel suo Liber Abaci ha tentato di dare una definizione generale di frazione continua. I primi studi rigorosi di frazioni continue appaiono in un libro di L. Bombelli del 1572, inventore, tra l’altro, dei numeri complessi. Egli dice che “metodi per formare le frazioni si trovano nelle opere di altri autori, che si attaccano e si accusano l’un l’altro, secondo me, senza ragione, perch´e sono tutti rivolti allo stesso fine”. Questo stesso fine era, come ha scritto nel 1613 il bolognese P.A. Cataldi nel suo Trattato del modo brevissimo di trovare la radice quadrata dei numeri, il problema dell’approssimazione, mediante un’espressione razionale, delle radici quadrate di un intero che non fosse un quadrato perfetto. Il termine frazione continua apparve per la prima volta nell’edizione del 1653 di J. Wallis Arithmetica infinitorum. Altri grandi matematici si sono occupati di frazioni continue infinite, ad esempio Eulero

1.5 Frazioni continue

49

nel suo De fractionibus continuis, Lagrange, Gauss e infine Liouville, che se ne serv`ı nella sua famosa dimostrazione dell’esistenza di numeri trascendenti. Per avvicinarci al concetto √ di frazione continua infinita, prendiamo, come semplice esempio, il numero 2. Dato che esso `e compreso tra 1 e 2, possiamo scriverlo nella forma √ 1 2=1+ x √ per qualche numero reale x > 1. Precisamente si ha x = 2 + 1, da cui   √ 1 1 x= 2+1= 1+ +1=2+ . x x Da questa equazione si deducono le seguenti altre: 1 = x

1 2+

1 x

1

= 2+

= ··· =

1 2+

1 x

Al tendere di n ad infinito si ottiene √ 2=1+

⎫ ⎪ . ⎪ ⎪ ⎪ 1 ⎪ ⎪ 2+ ⎪ ⎪ ⎪ 1 ⎪ ⎬ 2+ 1 .. n 2+ . ⎪ ⎪ 1 ⎪ ⎪ ⎪ 2+ ⎪ ⎪ 1⎪ ⎪ 2+ ⎪ ⎭ x 1

1

.

1

2+

1

2+

1

2+ 2+

1 2 + ···

√ Questo, intuitivamente, `e il modo di scrivere 2 sotto forma di frazione continua. Come c’era da aspettarsi, dato che abbiamo provato che le frazioni √ 2 non lo `e (cfr. Esercontinue semplici finite sono numeri razionali, mentre √ cizio A1.72), la frazione continua che otteniamo per 2 non `e finita, anche se non abbiamo ancora √ definito il concetto di frazione continua infinita. Lo sviluppo di 2 sotto forma di frazione continua svela una notevole eleganza e regolarit` a, rispetto al suo sviluppo decimale, che non presenta alcuna regolarit` a. Utilizzando una forma generalizzata di frazione continua, in√ cui i numeratori possono non essere degli 1, si pu`o scrivere il numero reale a2 + b, dove a, b sono numeri interi, nella forma seguente:

50

1 Qualche richiamo sui numeri

 a2 + b =

b 2a + b

.

b b

2a +

b

2a + 2a + In particolare, si ha 

b 2a + · · ·

a2 + 1 = [a; 2a, 2a, . . .] = [a, 2a],

dove 2a significa che la √ frazione continua `e periodica, ossia 2a viene ripetuto all’infinito. Il caso di 2 corrisponde a porre a = 1 e b = 1. Vediamo qualche altro esempio: √ √ √ 3 = [1; 1, 2], 5 = [2; ¯ 4], 10 = [3; ¯6], mentre il rapporto aureo ha uno sviluppo in frazione continua davvero perfetto: √ 5+1 = [1; 1, 1, 1, . . .]. 2 Prima di proseguire, dobbiamo dare un significato alla nozione di frazione continua con un numero infinito di termini. Premettiamo la seguente definizione. Definizione 1.5.6. Sia [a1 ; a2 , a3 , . . . , an ] una frazione continua semplice finita. La frazione continua che si ottiene troncando la frazione continua al k-esimo quoziente parziale si chiama k-esimo convergente e si denota al modo seguente: per ogni 1 ≤ k ≤ n. Ck = [a1 ; a2 , a3 , . . . , ak ], Si noti che Ck+1 si ottiene da Ck sostituendo ak con ak + 1/ak+1 . Ovviamente per k = n si ha l’intera frazione continua iniziale. Ogni Ck = [a1 ; a2 , . . . , ak ] `e un numero razionale, che indicheremo con ` importante trovare delle formule che perpk /qk , dove M CD(pk , qk ) = 1. E mettano di determinare il numeratore pk e il denominatore qk a partire dagli ai . Chiaramente, se C1 = [a1 ] = p1 /q1 , allora p1 = a1 e q1 = 1. Inoltre, se C2 = [a1 ; a2 ] = a1 +

a1 a2 + 1 p2 1 = = , a2 a2 q2

allora p2 = a1 a2 + 1 e q2 = a2 . Similmente, se C3 = [a1 ; a2 , a3 ] = a1 +

1 1 a2 + a3

=

a3 (a2 a1 + 1) + a1 , a3 a2 + 1

1.5 Frazioni continue

51

allora p3 = a3 (a2 a1 + 1) + a1 = a3 p2 + a1 e q3 = a3 a2 + 1 = a3 q2 + q1 . Si dimostra (cfr. Esercizio A1.75) che in generale si hanno le seguenti relazioni ricorsive: pk = ak pk−1 + pk−2 ,

qk = ak qk−1 + qk−2 .

(1.41)

Da queste si ottiene, con semplici calcoli, pk qk−1 − qk pk−1 = −(pk−1 qk−2 − qk−1 pk−2 ). Dato che p2 q1 − q2 p1 = (a1 a2 + 1) · 1 − a2 a1 = 1, ne segue che pk qk−1 − qk pk−1 = (−1)k .

(1.42)

Di qui segue in particolare che, per ogni k = 1, . . . , n, i numeri pk e qk sono primi tra loro. Dividendo l’ultima relazione per qk qk−1 otteniamo pk−1 (−1)k pk − = , qk qk−1 qk qk−1 ossia Ck − Ck−1 =

(−1)k , qk qk−1

(1.43)

valida per ogni k ≥ 1. In modo del tutto analogo si verifica la relazione Ck − Ck−2 =

(−1)k ak qk qk−2

(1.44)

valida per ogni k ≥ 2 (cfr. Esercizio A1.76). Utilizzeremo queste equazioni fra poco. Una formula che deriva direttamente dalla (1.41), ma che `e pi` u facile da utilizzare `e la seguente. I convergenti Ck = pk /qk della frazione continua [a1 ; a2 , a3 , . . . , an ], per 2 ≤ k ≤ n, si possono ottenere con la seguente formula (cfr. Esercizio A1.77): 

a1 1 1 0

         a2 1 a3 1 ak 1 pk pk−1 · · ··· = . 1 0 qk qk−1 1 0 1 0

(1.45)

Esempio 1.5.7. Determinare i convergenti della frazione continua 17/7 = [2; 2, 3] con il metodo ora menzionato. Si ha



2 1 1 0



2 1 1 0



=



5 2 2 1



=



p2 p1 q2 q1



,

52

1 Qualche richiamo sui numeri

da cui si vede che p2 /q2 = 5/2, e p1 /q1 = 2/1, come avevamo visto in precedenza. Andando avanti, si ha        p3 p2 17 5 3 1 5 2 , = = q3 q2 7 2 1 0 2 1 ossia, come deve essere, p3 /q3 = 17/7. Esempio 1.5.8. Trovare i convergenti di 214/35 = [6; 8, 1, 3]. Procedendo come prima, si ha        6 1 8 1 49 6 p2 p1 = = , 1 0 1 0 8 1 q2 q1 da cui p2 /q2 = 49/8, e p1 /q1 = 6/1. Inoltre        49 6 1 1 55 49 p 3 p2 = = , 8 1 q3 q2 1 0 9 8 da cui p3 /q3 = 55/9. Ovviamente p4 /q4 = 214/35 e non serve calcolarlo. Esempio 1.5.9. Quale numero razionale `e [1; 2, 3]? Si ha 

p3 p2 q3 q2



=



1 1 1 0

       2 1 3 1 10 3 · · = , 1 0 1 0 7 2

il che ci dice che [1; 2, 3] = C3 =

10 p3 . = q3 7

Esempio 1.5.10. Il periodo di rivoluzione di Saturno attorno al Sole `e di 29,46 anni. Ai tempi di Huygens si pensava che fosse 29,43 anni. Per simulare il moto di Saturno attorno al Sole Huygens doveva costruire due ruote dentate, una con p denti e l’altra con q denti, in modo tale che p/q fosse approssimativamente 29,43. Quali p e q scelse Huygens? Per essere efficienti, p e q dovevano essere relativamente piccoli: quindi non poteva usare una ruota da 2943 denti e una di 100 denti. Calcol` o allora i convergenti di 29, 43 = 2943/100. Dall’algoritmo euclideo si ottiene 2943 = 100 · 29 + 43, 100 = 43 · 2 + 14, 43 = 14 · 3 + 1, 14 = 1 · 14 = 0,

da cui segue che

1.5 Frazioni continue

2943 43 = 29 + , 100 100

100 14 =2+ , 43 43

53

43 1 =3+ , 14 14

quindi lo sviluppo di 2943/100 in frazione continua `e 2943 = [29; 2, 3, 14]. 100 I primi tre convergenti sono allora 29 , 1 a1 a2 + 1 59 C2 = , = a2 2 C1 =

C3 = a3 (a2 a1 + 1) + a1 a3 a2 + 1 =

206 3 · 59 + 29 = . 7 7

Una approssimazione abbastanza buona di 29,43 `e data dalla frazione 206/7 = 29, 4285. Pertanto, per simulare il moto di Saturno rispetto al moto della terra, Huygens costru`ı una ruota dentata con 7 denti e l’altra con 206 denti. Osserviamo che i convergenti Ck di una frazione semplice continua finita hanno carattere oscillante. Infatti vale il seguente lemma, di cui lasciamo la semplice dimostrazione come esercizio per il Lettore (cfr. Esercizio A1.78): Lemma 1.5.11. Sia a/b = [a1 ; a2 , . . . , an ] una frazione continua semplice. Allora i convergenti verificano le seguenti propriet` a: • C1 < C3 < C5 < · · · , • C2 > C4 > C6 > · · · , • C2j > C2j−1 , per ogni j ≥ 1. Di qui si deduce che C1 < C3 < C5 < · · · ≤

a ≤ · · · < C6 < C4 < C2 , b

(1.46)

ossia i convergenti approssimano la frazione continua ma in modo oscillante, cio`e quelli con indice dispari l’approssimano per difetto in modo crescente, quelli con indice pari per eccesso in modo decrescente, ed ogni convergente con indice pari `e maggiore del convergente precedente. Possiamo finalmente dare un senso a un’espressione del tipo [a1 ; a2 , a3 , . . .], con a1 , a2 , a3 , . . . successione illimitata di interi ai > 0 per i > 1, che diremo frazione continua semplice infinita con quozienti parziali a1 ; a2 , a3 , . . . , an , . . . . Posto Cn = [a1 ; a2 , a3 , . . . , an ], che diremo i convergenti della frazione continua infinita, definiamo [a1 ; a2 , a3 , . . .] = lim Cn . n→∞

L’esistenza di questo limite `e garantita dal seguente teorema:

54

1 Qualche richiamo sui numeri

Teorema 1.5.12. La definizione di frazione continua semplice infinita `e ben posta, cio`e il limite seguente esiste ed `e un numero irrazionale: lim Cn = lim [a1 ; a2 , a3 , . . . , an ].

n→∞

n→∞

Dimostrazione. Come abbiamo visto, la successione dei convergenti C1 , C3 , C5 , . . . di indice dispari `e crescente e quella C2 , C4 , C6 , . . . di quelli di indice pari `e decrescente. Inoltre la prima successione `e limitata superiormente e la ` ben noto che seconda inferiormente. E lim C2n−1 = sup{C2n−1 },

n→∞

lim C2n = inf{C2n }

n→∞

sono due numeri che denotiamo con α1 e α2 . Si ha poi, usando la (1.43), 1 = 0, n→∞ q2n q2n−1

α2 − α1 = lim (C2n − C2n−1 ) = lim n→∞

in quanto limn→∞ qn = +∞. Di conseguenza α1 = α2 . Posto α = α1 = α2 , si ha α = lim Cn . n→∞

Quanto all’irrazionalit` a di α, ragioniamo per assurdo e supponiamo α = p/q, con p, q interi, q = 0. Poich´e per ogni n ≥ 1, vale C2n−1 < α < C2n , si ha pure 0 < α − C2n−1 < C2n − C2n−1 , ossia 0 C2n−1 , mentre il termine di destra tende a zero per n che tende all’infinito. ⊓ ⊔ Abbiamo cos`ı precisato il concetto di frazione √ continua semplice infinita con relativi convergenti. Ad esempio, nel caso di 2, si ha C1 = 1, C2 = 3/2 = 1, 5, C3 = 1, 4 e poi

1.5 Frazioni continue

55

5 = 1, 41¯ 6, 12 12 = 1, 4137931034482758620689655172, C5 = 1 + 29 29 = 1, 4142857, C6 = 1 + 70 .. .

C4 = 1 +

I√convergenti, anche per le frazioni√continue infinite, sono oscillanti. Nel caso 2, tutti i C2k sono maggiori di 2, mentre tutti i C2k+1 sono minori. Ossia la successione {C2k+1 } `e monotona crescente, mentre {C2k } `e monotona √ decrescente e hanno entrambe per limite 2. Completiamo il teorema precedente come segue: Teorema 1.5.13. Ogni numero irrazionale positivo α si pu` o esprimere come frazione continua semplice infinita in modo unico. Dimostrazione. Diamo qualche cenno della dimostrazione lasciando alcuni dettagli al Lettore (cfr. Esercizio A1.79). Vogliamo definire per ricorrenza i quozienti parziali a1 , a2 , . . . , an , . . . della frazione continua che definisce α. Procediamo come segue: • poniamo α1 = α; • supponiamo definiti α1 , . . . , αn ; poniamo an = [αn ] e definiamo per ricorrenza αn+1 = 1/(αn − an ). Si verifica che α = [a1 ; a2 , . . . , an , . . .]. Supponiamo ora α = [a1 ; a2 , . . . , an , . . .] = [b1 ; b2 , . . . , bn , . . .]. Poich´e si ha C1 = a1 < α < a1 +

1 = C2 , a2

ne segue che a1 = [α]. Similmente deve essere b1 = [α] e dunque a1 = b1 . Notiamo ora che 1 , [a2 ; a3 , . . . , an , . . .] 1 α = [b1 ; b2 , . . . , bn , . . .] = a1 + , [b2 ; b3 , . . . , bn , . . .]

α = [a1 ; a2 , . . . , an , . . .] = a1 +

da cui segue [a2 ; a3 , . . . , an , . . .] = [b2 ; b3 , . . . , bn , . . .], e pertanto a2 = b2 . Per induzione si prova che an = bn per ogni n > 0. ⊓ ⊔ √ Esempio 1.5.14. Si scriva 6 come frazione continua. √ Si pone a1 = [ 6] = 2. Conseguentemente si definisce

56

1 Qualche richiamo sui numeri

1 = α2 = √ 6−2



6+2 , 2

a2 = [α2 ] = 2,

e successivamente √ 1 = 6 + 2, α3 = √ 6+2 −2 2 √ 6+2 1 α4 = √ , = 2 6−2

a3 = [α3 ] = 4,

a4 = [α3 ] = 2,

e cos`ı via. Dunque √ 6 = [2; 2, 4, 2, 4, . . .] = [2, 2, 4]. 1.5.3 Frazioni continue periodiche √ √ La periodicit` a della frazione continua di 6, cos`ı come quella di 2 vista in precedenza, non `e casuale. Innanzitutto, precisando ed estendendo il concetto di frazione continua periodica gi` a in parte introdotto dianzi, diremo che una frazione continua [a1 ; a2 , a3 , a4 , . . .] `e periodica se esistono interi positivi m, t ∈ N tali che an = an+t per ogni n > m. In tal caso si usa la notazione [a1 ; a2 , a3 , a4 , . . .] = [a1 ; a2 , . . . , am , am+1 , . . . , am+t ] e a1 , . . ., am si dice l’antiperiodo della frazione continua mentre am+1 , . . ., am+t si dice il periodo della frazione. Se manca l’antiperiodo, cio`e se la frazione `e del tipo [a1 ; a2 , . . . , at ], essa si dice puramente periodica. Determiniamo ora i numeri irrazionali tali che il loro sviluppo in frazione continua sia periodico. Premettiamo una definizione. Un numero reale α si dice quadratico se α `e radice di un’equazione di secondo grado a coefficienti interi. In tal caso α `e della forma √ a, b ∈ Q, α = a + b d, con d intero positivo (cfr. Esercizio A1.81). Il numero √ α′ = a − b d,

che `e radice con α della stessa equazione di secondo grado a coefficienti interi, si dice il coniugato di α. Ad esempio √ √ 5 5 1+ , 1− 4 4 sono irrazionali quadratici coniugati. Un numero quadratico α si dice ridotto se α > 0 mentre −1 < α′ < 0. Ad esempio se n `e un qualunque intero positivo che non `e un quadrato,√`e chiaro che il √ √ numero n + [ n] `e ridotto (cfr. Esercizio A1.85). Ad esempio 2 + 5 `e ridotto. Vale il seguente teorema la cui dimostrazione verr` a sviluppata come esercizio guidato per il Lettore (cfr. Esercizi da A1.87 a A1.94):

1.5 Frazioni continue

57

Teorema 1.5.15 (Lagrange). Una frazione continua α = [a1 ; a2 , a3 , a4 , . . .] `e periodica se e solo se α `e un irrazionale quadratico. Inoltre [a1 ; a2 , a3 , a4 , . . .] `e puramente periodica se e solo se α `e ridotto. In tal caso si ha α = [a1 ; a2 , . . . , at ],



1 = [at ; at−1 , . . . , a1 ]. α′

Esempio 1.5.16. Un intero positivo n si dice un quadrato perfetto o semplicemente un quadrato, se esiste un intero n tale che n = a2 . Se n `e un intero positivo che non √ `e un quadrato perfetto, allora n `e un numero irrazionale (cfr. Esercizio A1.80). √ Vediamo come si presenta in tal caso lo sviluppo in frazione continua di n. Poniamo √ a0 = n. √ √ Abbiamo gi` a visto che n + [ n] `e ridotto. Applicando il Teorema 1.5.15 e √ √ notando che [ n + [ n]] = 2a0 , si ha uno sviluppo del tipo √ √ n + [ n] = [2a0 ; a1 , a2 , . . . , an ] = [2a0 ; a1 , a2 , . . . , an , 2a0 ; a1 , a2 , . . . , an ], da cui √

n = [a0 ; a1 , a2 , . . . , an , 2a0 ; a1 , a2 , . . . , an ] = [a0 ; a1 , a2 , . . . , an , 2a0 ].

Quindi



e pertanto

√ n − [ n] = [0; a1 , a2 , . . . , an , 2a0 ],

1 √ = [a1 ; a2 , . . . , an , 2a0 ]. n + [ n] D’altra parte, applicando ancora il Teorema 1.5.15, abbiamo √



1 √ = [an ; an−1 , an−2 , . . . , a1 , 2a0 ]. n + [ n]

Dunque si ottiene a 1 = an ,

a2 = an−1 ,

...,

an = a1 ,



cio`e lo sviluppo in frazione continua di n ha una interessante propriet` a di simmetria: √ n = [a0 ; a1 , a2 , . . . , a2 , a1 , 2a0 ]. Abbiamo visto gi` a vari esempi di questa situazione. A titolo di curiosit` a il Lettore interessato pu` o consultare, con ulteriore verifica di quanto qui visto, la tabella degli √ sviluppi in frazione continua di tutti gli irrazionali del tipo n, con n intero positivo non superiore a 100, in [46] (Table 5).

1.5.4 Modello geometrico delle frazioni continue Accenniamo ora brevemente ad un semplicissimo e interessante modello geometrico delle frazioni continue e dei relativi convergenti. Questa interpretazione fu trovata da F. Klein nel 1895 (cfr. [16]). Sia α un numero irrazionale positivo. Fissato un riferimento cartesiano, consideriamo la retta y = αx. Essendo α irrazionale, tale retta non passa per nessun punto a coordinate intere (cfr. figura 1.3).

58

1 Qualche richiamo sui numeri ·

·

·

·

·

·

·

·

·

·

·

·

· · y = αx

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

•·

·

·

·

·

·

·

·

·

·

·

·

·

·

•·

·

·

·

·

·

·

·

·

·

·

·

•1

•·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

•· 1 ·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

y

x

·

Figura 1.3. Poligonali approssimanti la retta y = αx nel piano cartesiano

Immaginiamo ora di infilare dei chiodi in corrispondenza dei punti a coordinate intere positive del piano, quindi su tutti i punti a coordinate intere che si trovano nel primo quadrante del piano, e immaginiamo di disporre lungo la retta y = αx uno spago con un estremo fissato in un punto infinitamente lontano, e l’altro estremo fissato nell’origine. Se spostiamo l’estremo che si trova sull’origine verso il basso, tutto lo spago si sposter` a e andr` a a sbattere contro alcuni dei chiodi, ossia colpir` a alcuni punti a coordinate intere positive. Analogamente, spostando l’estremo dello spago che si trova sull’origine verso l’alto, lo spago andr` a a colpire alcuni chiodi, e quindi alcuni punti a coordinate intere: lo spago verr` a cos`ı a formare due poligonali, una che si trova tutta al di sotto della retta y = αx e una al di sopra. Indicati con (n1 , m1 ), (n3 , m3 ), (n5 , m5 ), . . ., i chiodi colpiti dallo spago quando si sposta verso il basso, ossia i vertici della prima poligonale, e con (n2 , m2 ), (n4 , m4 ), (n6 , m6 ), . . ., i chiodi colpiti dallo spago quando si sposta verso l’alto, ossia i vertici della seconda poligonale, i quozienti mi /ni altro non sono che i convergenti Ci = pi /qi della frazione continua [a1 ; a2 , a3 , . . .] che rappresenta il numero irrazionale α (cfr. figura 1.3), ossia mi pi = Ci = per ogni i . ni qi

1.5.5 L’approssimazione di irrazionali mediante i convergenti Data una frazione continua semplice infinita [a1 ; a2 , a3 , . . .] `e possibile approssimare il corrispondente numero irrazionale α quanto si vuole mediante numeri razionali calcolando i convergenti Cn . Le formule (1.43) assieme alla (1.46) ci dicono che utilizzando Cn−1 per approssimare r si commette un errore minore di

1.5 Frazioni continue

59

1 . qn qn−1 Questa circostanza si pu` o verificare anche tenendo presente il modello geometrico che abbiamo presentato dianzi. Come abbiamo gi` a accennato, uno dei motivi dell’importanza della rappresentazione dei numeri mediante frazioni continue risiede nel fatto che i relativi convergenti forniscono, in un senso che ora vogliamo precisare, la migliore approssimazione possibile di un irrazionale mediante razionali. In questo ordine di idee, proveremo ora alcuni risultati. Teorema 1.5.17. Sia α un irrazionale e sia α = [a1 ; a2 , a3 , . . . , an , . . .] il suo sviluppo in frazione continua, e ne siano Cn = pn /qn i convergenti. Se p, q sono interi con q > 0 e se n `e un intero positivo tale che |qα − p| < |qn α − pn |, allora q ≥ qn+1 . Inoltre, se

    α − p  < |α − Cn |,  q

(1.47)

(1.48)

allora q > qn . In altri termini, ogni convergente Cn = pn /qn approssima il valore di α meglio di qualunque frazione il cui denominatore non superi qn . Dimostrazione. Supponiamo valga la (1.47) e supponiamo per assurdo che sia q < qn+1 . Consideriamo il sistema  pn x + pn+1 y = p, qn x + qn+1 y = q. Usando la (1.42), si trova y = (−1)n (pqn − qpn ),

x = (−1)n (qpn+1 − pqn+1 ).

Notiamo che x = 0, altrimenti si avrebbe q = qn+1 y ≥ qn+1 , contro l’ipotesi. Similmente, si ha y = 0, altrimenti avremmo p = pn x, q = qn x e allora |qα − p| = |x||qn α − pn | ≥ |qn α − pn | contro la (1.47). Verifichiamo che x e y hanno segni opposti. Sia y < 0. Allora qn x = q−qn+1 y > 0 e pertanto x > 0 perch´e qn > 0. Sia y > 0. Poich´e qn+1 y ≥ qn+1 > q, si ha qn x = q − qn+1 y < 0, sicch´e x < 0. Dall’andamento oscillante dei convergenti segue subito che qn α − pn e qn+1 α − pn+1 hanno segni opposti. Pertanto x(qn α − pn ) e y(qn+1 α − pn+1 ) hanno lo stesso segno. Poich´e |qα − p| = |(qn x + qn+1 y)α − (pn x + pn+1 y)|, si ha

|qα − p| = |x||qn α − pn | + |y||qn+1 α − pn+1 | ≥ |qn α − pn |

contro la (1.47). Ci` o prova la prima parte del teorema. Supponiamo ora valga la (1.48) e supponiamo per assurdo che sia q ≤ qn . Allora si ha

60

1 Qualche richiamo sui numeri    p q α −  < qn |α − Cn |, q

cio`e la (1.47). Ma allora deve essere q ≥ qn+1 , e dunque avremmo qn ≥ qn+1 , che contraddice la (1.41). ⊔ ⊓ Esempio 1.5.18. Abbiamo visto che il convergente C3 della frazione √ continua √ 2√ = [1, 2] vale 7/5 = 1, 4. L’errore che si commette approssimando 2 con 1, 4 `e 2 − 1, 4 < C4 − C3 = 1, 416 − 1, 4 = √ 0, 016. Mostriamo che ogni frazione con denominatore, ad esempio, 4 approssima 2 peggio di 1, 4. Le uniche √ frazioni da considerare sono 5/4 = 1, 25, 6/4 = 3/2 = 1, 5, 7/4 = 1, 75 √ perch´e 2 `e compreso tra 1 e 2. Poich´ √ e 1, 25 < 1, 4 `e chiaro che 1, 25 approssima 2 peggio di 1, 4. D’altra parte 1, 5 −√ 2 > 1, 5 − C4 = 1, 5 − 1, 416 = 0, 183 > 0, 016. Quindi anche 1, 5 o accade per 1, 75 > 1, 5. approssima 2 peggio di 1, 4. A maggior ragione ci` Teorema 1.5.19. Sia α un irrazionale e sia α = [a1 ; a2 , a3 , . . . , an , . . .] il suo sviluppo in frazione continua, e ne siano Cn = pn /qn i convergenti. Se p, q sono interi primi tra loro, con q > 0 e tali che     α − p  < 1 ,  q 2q 2 allora p/q `e un convergente della frazione continua [a1 ; a2 , a3 , . . . , an , . . .].

Dimostrazione. Supponiamo che p/q non sia un convergente. Possiamo trovare due convergenti successivi, Cn , Cn+1 tali che qn ≤ q < qn+1 . Per il Teorema 1.5.17 si ha    1 p |qn α − pn | ≤ |qα − p| = q α −  < , q 2q

da cui

1 . 2qqn Poich´e p/q = Cn , si ha |qpn − pqn | ≥ 1, e dunque       |qpn − pqn | p 1 p 1 1 ≤ = Cn −  ≤ |α − Cn | + α −  < + 2, qqn qqn q q 2qqn 2q |α − Cn |
q, contro l’ipotesi.

⊔ ⊓

Proposizione 1.5.20. Sia α un irrazionale e sia α = [a1 ; a2 , a3 , . . . , an , . . .] il suo sviluppo in frazione continua, e ne siano Cn = pn /qn i convergenti. Per ogni n ≥ 1, si ha |p2n − α2 qn2 | < 2α. Dimostrazione. Tenendo conto delle (1.43) e (1.46), si ha |p2k − α2 qk2 | = qk2 |α2 − Ck2 | = qk2 |α − Ck | · |α + Ck | <   qk 1 < α+α+ qk+1 qk qk+1

1.5 Frazioni continue

61

e quindi   qk 1 |p2k − α2 qk2 | − 2α < 2α −1 + + < 2 qk+1 2αqk+1     qk+1 1 qk < 2α −1 + = 0, + < 2α −1 + qk+1 qk+1 qk+1 ⊔ ⊓

che `e quanto volevamo dimostrare.

Possiamo applicare il precedente risultato per dare un’informazione, che ci sar` a utile in seguito (cfr. Capitolo 6). Siano n e a interi positivi e sia r il resto della divisione di a per n. Quindi 0 ≤ r < n. Definiamo minimo residuo assoluto di a rispetto a n, o modulo n, l’intero r, se 0 ≤ r ≤ n/2, ovvero l’intero r − n se n/2 < r < n. In quest’ultimo caso, si ha 0 > r − n > −n/2. Denoteremo il minimo residuo assoluto di a rispetto a n con il simbolo MRA(a, n). In definitiva abbiamo sempre n n (1.49) − < MRA(a, n) ≤ 2 2 e MRA(a, n) `e l’unico intero verificante la (1.49) tale che a−MRA(a, n) sia divisibile per n. Ad esempio MRA(35, 9) = −1. Proposizione 1.5.21. Sia n ≥ 17 un intero positivo che non sia un quadrato perfetto e sia Ck = pk /qk il k-esimo convergente della frazione continua che esprime √ n. Allora per ogni k ≥ 1 si ha √ | MRA(pk , n)| < 2 n. Dimostrazione. Dal lemma precedente si deduce che √ |p2k − nqk2 | < 2 n √ per ogni k ≥ 1. Poich´e n ≥ 17 si ha n < n/4 e quindi |p2k − nqk2 |
n0 , una volta che ci siano noti i termini precedenti am , con m < n. Dimostrare che si pu` o determinare an per ogni n ∈ N. A1.10. Supponiamo di conoscere i valori iniziali a0 , a1 , a2 , . . ., an0 −1 , an0 di una successione {an } di elementi di un insieme X, e di saper determinare an , per ogni o determinare n > n0 , una volta che ci sia noto il termine an−1 . Dimostrare che si pu` an per ogni n ∈ N. Gli Esercizi A1.11–A1.25 sono dedicati a richiami di calcolo combinatorio. A1.11. Dato un insieme non vuoto X, si dice permutazione di X una qualunque biiezione di X in s´e. Denotiamo con In l’insieme {1, . . . , n} dei primi n numeri naturali. L’insieme delle biiezioni di In , n ≥ 1, in s´e si indica col simbolo Sn .

64

1 Qualche richiamo sui numeri

Dato un elemento f di Sn , si ponga f (1) = i1 , . . . , f (n) = in . A σ rimane dunque associata la n-upla ordinata (i1 , . . . , in ) di elementi di In , che si dice simbolo della permutazione f e si denota con σ(f ). In particolare (1, . . . , n) `e il simbolo dell’applicazione identica di In detta permutazione identica. Provare che l’applicazione σ : f ∈ Sn → σ(f ) ∈ In × · · · × In    n

`e iniettiva, ossia una permutazione `e univocamente determinata dal suo simbolo. Dunque `e lecito identificare una permutazione col suo simbolo, cosa che faremo nel seguito. A1.12. Sia n ∈ N un numero naturale. Si definisce fattoriale di n il numero, denotato con n!, che vale 1 se n = 0, 1 e vale n! = (n − 1)! · n = n(n − 1)(n − 2) · · · 2 · 1 se n > 1. Dimostrare per induzione che per ogni intero n ≥ 1, l’ordine di Sn `e n!. A1.13.* Quante sono le applicazioni iniettive A ֒→ B tra due insiemi A e B che hanno entrambi n elementi? Quante sono quelle suriettive? (a) (b) (c) (d)

Le funzioni iniettive sono 2n , mentre quelle suriettive sono 2n + 1. Le funzioni iniettive sono anche suriettive, e viceversa, e sono in numero di nn . Le suriettive sono tante quante le iniettive, che sono n!. Nessuna delle precedenti.

A1.14. Siano n e k due numeri interi positivi tali che n ≥ k. Si ricordi la definizione di coefficiente binomiale:

n(n − 1)(n − 2) · · · (n − k + 1) n n! = . (1.50) = k!(n − k)! k! k Si noti che



n n = . k n−k

Si dimostri che





n n = + . k k−1

(1.51)





n n−1 m = + + ··· + . k k k

(1.52)

n+1 k



Se ne deduca che

n+1 k+1



A1.15.* Provare per induzione su n che il coefficiente binomiale sottoinsiemi di In aventi ordine m. A1.16. Provare la disuguaglianza

 n m n+m−1 . ≥ m m

n m

`e il numero di

A1 Esercizi di carattere teorico

65

A1.17. Dimostrare che il sottoinsieme di In × In formato da tutte le coppie (i, j) con 1 ≤ i < j < n ha lo stesso numero   di elementi dell’insieme dei sottoinsiemi di ordine 2 di In , e dunque ha ordine n2 = n(n − 1)/2. Provare che invece il sottoinsieme di In × In formato da tutte le coppie (i, j) con   = n(n + 1)/2. 1 ≤ i ≤ j < n, ha ordine n+1 2

A1.18. Siano a, b due elementi di un campo. Si provi la formula del binomio di Newton:





n  n n−2 2 n n−3 3 n n−i i n n n−1 n b+ b + b + ··· + b = b. (a + b) = a + na a a a 2 3 i i=0

(Suggerimento: si proceda per induzione su n; `e conveniente usare la formula (1.51) per il passo induttivo.) A1.19.* Siano A e B due insiemi con rispettivamente n ed m elementi e supponiamo n ≤ m. Quante sono le funzioni iniettive A ֒→ B? (a) (b) (c) (d)

m! − n!. (n + m)(n + m − 1)(n + m − 2) · · · (n + 1). m(m − 1)(m − 2) · · · (m − n + 1). Nessuna delle precedenti.

Perch´e abbiamo supposto n ≤ m? A1.20.* Siano A e B due insiemi con rispettivamente n ed m elementi. Quante sono le funzioni A → B? (a) (b) (c) (d)

mn . n · m. nm . Nessuna delle precedenti.

A1.21. Sia A un insieme con n elementi e sia m un intero positivo. Provare che l’insieme A × · · · × A delle m–uple ordinate di elementi di A ha ordine nm .    m

A1.22.* Ricordiamo che l’insieme delle parti P(X) di un insieme X `e l’insieme che ha per elementi tutti i sottoinsiemi di X, compreso X stesso e l’insieme vuoto. Se X `e un insieme finito formato da n elementi, quanti elementi ha P(X)?

(a) (b) (c) (d)

2n − 1. 2n . 2(2n−1 − 1). Nessuna delle precedenti.

A1.23. Provare che per ogni intero n ≥ 0 si ha





n n n n n 2 = + + ··· + + . n n−1 1 0 A1.24.* Sia K un campo e siano x1 , . . . , xn variabili su K. Si dice monomio unitario di grado h in x1 , . . . , xn una espressione del tipo xi11 · · · xinn , con i1 , . . . , in interi non negativi tali che i1 + · · · + in = h. Denotiamo con s(n, h) il numero di tali monomi.

66

1 Qualche richiamo sui numeri Si provi, ragionando per induzione su n, che

n+h−1 s(n, h) = . h

A1.25.* Siano a1 , . . . , ar elementi distinti di un campo. Si provi, procedendo per induzione, la formula di Leibnitz , che estende quella del binomio di Newton (a1 + · · · + ar )n =

r 

s=1



{ai1 ,...,ais } ni1 +···+nis =n

ni n! n a 1 · · · aisis , ni1 ! · · · nis ! i1

dove {ai1 , . . . , ais } `e un qualunque sottoinsieme di ordine s di {a1 , . . . , ar } e ni1 , . . . , nis sono interi positivi qualunque, ma tali che ni1 + · · · + nis = n. A1.26. Si associ alla (1.4) la formula lineare ricorsiva omogenea a′n = bk−1 a′n−1 + bk−2 a′n−2 + · · · + b0 a′n−k .

(1.53)

Dimostrare che se {yn } `e una soluzione della formula lineare ricorsiva (1.4), allora ogni sua soluzione `e della forma {yn + xn }, dove {xn } `e una soluzione della relazione lineare ricorsiva omogenea associata (1.53). A1.27. Sia {an }n∈N una successione di elementi del campo K che verifica una relazione lineare ricorsiva del tipo an+1 = ban + c, con b, c ∈ K. Si provi che se si conoscono a0 , a1 , a2 si possono determinare tutti gli elementi della successione. A1.28. Sia A la matrice (1.6). Dimostrare la Proposizione 1.2.3 per induzione su n. A1.29. Dato un segmento di lunghezza a, costruire con riga e compasso un segmento di lunghezza b tale che a/b sia il rapporto aureo. (Suggerimento: se M `e il punto medio di un lato AB di un quadrato di lato a, allora il segmento√che unisce M ad un vertice del quadrato diverso da A e B ha lunghezza r = ( 5/2)a; il segmento di lunghezza b cercato ha estremi B e l’intersezione del prolungamento di AB fuori da B con la circonferenza di centro M e raggio r.) I seguenti Esercizi, dal A1.30 al A1.35, sono dedicati ai numeri di Fibonacci. A1.30. Si provi che per ogni n e ogni k in N risulta fn+k = fk fn+1 + fk−1 fn .

(1.54)

Se ne deduca che fkn `e un multiplo di fn . A1.31.* Si provi, ragionando per induzione, che ogni intero positivo si pu` o scrivere come somma di un numero finito di numeri di Fibonacci distinti. A1.32. Dimostrare, a partire dalla (1.10), supponendo cio`e di non conoscere la formula ricorsiva (1.5), che i numeri di Fibonacci sono interi.

A1 Esercizi di carattere teorico A1.33. Si provi, ragionando per induzione, che per ogni n ≥ 1 risulta √ n−2  1+ 5 fn ≥ 2

67

(1.55)

e la disuguaglianza diventa stretta se n ≥ 3. A1.34. Si dimostri che per ogni n si ha f2n = f1 + f3 + f5 + · · · + f2n−1 . A1.35. Si provi che per ogni n risulta fn+1 =



h+k=n h≥k≥0

h . k

(Si suggerisce di procedere per induzione su n, utilizzando la relazione ricorsiva (1.5) e la formula (1.51).) A1.36. Si dimostri la seguente variazione dell’algoritmo della divisione. Siano a, b interi, con b = 0. Dimostrare che esistono e sono unici due interi q, r con −|b|/2 < r ≤ |b|/2 tali che a = qb + r. A1.37. Siano a, b, c ∈ Z non nulli. Si provi che se M CD(a, b) = 1 e se c | a allora anche M CD(c, b) = 1. A1.38. Siano a, b ∈ Z non nulli. Si provi che se M CD(a, b) = 1 e se b | a allora b = ±1. A1.39.* Questo esercizio offre una dimostrazione teorica, ma non costruttiva, dell’esistenza in Z del massimo comun divisore di due interi a e b non entrambi nulli. Sia S = { xa + yb | x, y ∈ Z, xa + yb > 0 } ⊆ N. Provare che tale insieme ha un minimo d = x0 a + y0 b. Dimostrare che d `e il massimo comun divisore di a e b. A1.40. Si elabori un algoritmo per la ricerca del massimo comun divisore di due numeri interi basato sull’algoritmo della divisione di cui all’Esercizio A1.36 invece che sull’algoritmo della divisione usuale. A1.41. Sia (¯ x, y¯) una soluzione intera dell’equazione (1.18). Si dimostri che tutte e sole le soluzioni intere di (1.18) si ottengono aggiungendo alla (¯ x, y¯) una soluzione intera (x0 , y0 ) dell’equazione omogenea associata ax + by = 0. A1.42. Supponiamo di dover fare la divisione di 123456 per 365, cio`e di dover trovare gli interi q ed r tali che 123456 = q · 365 + r, con 0 ≤ r < 365. Non abbiamo voglia di fare la divisione a mano, quindi prendiamo la calcolatrice e troviamo che il risultato della divisione di 123456 per 365 `e 338,23651644. Come facciamo a determinare q ed r richiesti? A1.43. Provare che in un anello euclideo valgono risultati analoghi a quelli della Proposizione 1.3.5 e dei suoi corollari 1.3.6, 1.3.7, 1.3.8 e 1.3.9. A1.44. Sia A un dominio di integrit` a e ne siano a e b elementi non nulli. Si provi che se d e d′ sono entrambi un massimo comun divisore di a e b, essi sono associati. Viceversa, se d = M CD(a, b) e se d′ `e associato a d, anche d′ = M CD(a, b).

68

1 Qualche richiamo sui numeri

A1.45. Sia A un dominio di integrit` a. Provare che la relazione in A definita da x ∼ y se e solo se x `e associato a y `e una relazione di equivalenza. A1.46. Sia A un dominio di integrit` a. Provare che in A gli ideali (x) e (y) coincidono se e solo se x e y sono associati. Se ne deduca che per ogni ideale I di Z esiste un unico intero positivo x tale che I = (x). A1.47.* Siano n, m interi positivi. Si provi che il sottoinsieme (n) ∩ (m) di Z `e un ideale. Sia D l’intero positivo tale che (D) = (n) ∩ (m). Si provi che D `e l’unico intero positivo multiplo sia di n che di n e tale che, per ogni multiplo positivo N di n e m, si abbia D | N . L’intero D `e detto minimo comune multiplo di n e m e si denota con mcm(n, m). A1.48.* Sia A un dominio di integrit` a. Si osservi che per ogni a = 0, l’applicazione x ∈ A → ax ∈ A `e iniettiva. Se ne deduca che in un dominio di integrit` a finito ogni elemento non nullo ha inverso e dunque ogni dominio di integrit` a finito `e un campo. Si concluda che un anello unitario finito `e un campo se e solo se `e un dominio di integrit` a. A1.49.* Si consideri il sottoinsieme G dell’insieme C dei numeri complessi formato dai numeri, detti interi di Gauss, del tipo x + iy, con x, y ∈ Z. Mostrare che G `e un sottoanello di C. Si definisca in G l’applicazione v : x + iy ∈ G → x2 + y 2 ∈ N. In altri termini v(x + iy) `e la norma ||x + iy|| del numero complesso x + iy. Mostrare che per essa vale la propriet` a (1) della definizione di anello euclideo. Siano a, b ∈ G, con b = 0. Si consideri il numero complesso x + iy = a/b. Si provi che esistono degli interi x1 , y1 tali che |x − x1 | ≤ 1/2 e |y − y1 | ≤ 1/2. Si ponga x2 = x − x1 , y2 = y − y1 , sicch´e a = b(x1 + iy1 ) + b(x2 + iy2 ). Si noti che x1 + iy1 e b(x2 + iy2 ) sono interi di Gauss. Inoltre si osservi che v(b(x2 + iy2 )) = v(b)||x2 + iy2 || ≤

v(b) < v(b). 2

Si deduca che G `e un anello euclideo. A1.50.* Se α `e un numero complesso, si indica con Z[α] il pi` u piccolo sottoanello di C contenente Z e α. Si dimostri che se α2 ∈ Z, allora Z[α] `e costituito da tutti i numeri complessi del tipo x + αy, con x, y ∈ Z. A1.51. Provare che l’anello A[x] dei polinomi a coefficienti in un dominio di integrit` a A `e un dominio di integrit` a. A1.52. Sia f (x) un polinomio a coefficienti in un campo K. Dimostrare che esiste un unico polinomio monico associato ad f (x). (Suggerimento: dividere f (x) per il suo coefficiente direttore.) A1.53. Siano f1 (x), f2 (x) polinomi a coefficienti in un campo K e sia α ∈ K. Dimostrare che se α `e una radice di f1 (x) e f2 (x) con molteplicit` a rispettivamente k1 e k2 ,

A1 Esercizi di carattere teorico

69

allora α `e radice del polinomio f1 (x)f2 (x) con molteplicit` a k1 + k2 . Sia k la molteplicit` a di α come radice del polinomio f1 (x) + f2 (x). Dimostrare che k ≥ min{k1 , k2 } e che se k1 = k2 , allora k = min{k1 , k2 }. (Suggerimento: applicare il Teorema di Ruffini.) A1.54.* Sia K un campo, c un suo elemento e f (x) ∈ K[x] un polinomio di grado t > 0 tale che f (c) = 0. Provare che esiste uno e un solo polinomio g(x) ∈ K[x] di grado minore di t tale che (x − c) · g(x) − 1 sia divisibile per f (x). A1.55. Sia f (x) un polinomio a coefficienti in un campo K. Se f (x) ha grado n, allora f (x) ammette al pi` u n radici, contate con la loro molteplicit` a. (Suggerimento: applicare il Teorema di Ruffini e procedere per induzione.) A1.56. Ricordiamo il seguente teorema che verr` a dimostrato nel Capitolo 4 (cfr. Teorema 4.5.21): Teorema A1.1 (Teorema Fondamentale dell’Algebra). grado positivo a coefficienti in C ha qualche radice in C.

Ogni polinomio di

Usando tale teorema, dimostrare che un polinomio f (x) ∈ C[x] di grado n ammette in C esattamente n radici, contate con la loro molteplicit` a. (Suggerimento: usare il Teorema di Ruffini e procedere per induzione su n.) A1.57. Sia f (x) un polinomio appartenente a R[x], di grado > 1. Sia α ∈ C una radice di f (x) come polinomio a coefficienti complessi. Provare che f (x) ammette anche la radice complessa coniugata α. ¯ A1.58. Dimostrare che l’applicazione derivata D : K[x] → K[x] definita a pagina 27 `e lineare, cio`e D(f (x) + g(x)) = D(f (x)) + D(g(x)), per ogni coppia di polinomi f (x), g(x) ∈ K[x]. A1.59.* Dimostrare la regola di Leibnitz per la derivata dei polinomi: D(f (x) · g(x)) = D(f (x))·g(x)+D(g(x))·f (x), per ogni coppia di polinomi f (x), g(x) ∈ K[x]. A1.60.* Dimostrare che l’applicazione derivata `e univocamente determinata dalla linearit` a, dalla regola di Leibnitz e dal fatto che D(x) = 1. A1.61. Dimostrare che se f (x) `e un polinomio di grado n, allora la i-esima derivata f (i) (x) di f `e 0, per ogni i > n. (Suggerimento: dimostrare l’asserzione per f (x) = cxn per induzione su n). A1.62. Dimostrare la formula (1.25) a pagina 28. A1.63. Sia f (x) un polinomio a coefficienti in Z e sia s ∈ Z. Provare che per ogni intero positivo n si ha che n! divide f (n) (s). (Suggerimento: dimostrare l’asserzione per i monomi.) I seguenti esercizi, dal A1.64 al A1.69, sono dedicati a sottolineare l’importanza dei numeri di Fibonacci in relazione all’algoritmo di Euclide. A1.64. Si dimostri per induzione che due numeri di Fibonacci consecutivi sono primi tra loro. A1.65.* Si provi che il massimo comun divisore di due numeri di Fibonacci `e ancora un numero di Fibonacci. Precisamente M CD(fn , fm ) = fd , dove d = M CD(m, n). A1.66.* Si provi che fk divide fn se e solo se k divide n.

70

1 Qualche richiamo sui numeri

A1.67. Quanto vale limn→∞ (fn+1 /fn ) ? (a) (b) (c) (d)

1. √ (1 √ + 5)/2. 5/2. Nessuna delle precedenti.

A1.68.* Si provi per induzione su k che se rn `e il primo resto nullo nell’algoritmo euclideo effettuato a partire da due qualunque numeri a e b, allora rn−k ≥ fk , dove fk `e il k-esimo numero di Fibonacci. A1.69.* Si sfrutti il risultato dell’Esercizio A1.68 per dimostrare che se b < fn , allora, per ogni a ≥ b, il numero D(a, b) di divisioni necessarie per ottenere un resto nullo nell’algoritmo euclideo `e D(a, b) < n. A1.70. Provare il Lemma 1.4.5. A1.71. Provare la Proposizione 1.4.6. √ A1.72. Provare che 2 non `e un numero razionale. A1.73. Dimostrare che lo sviluppo in frazione continua di un numero razionale `e unica, se supponiamo che l’ultimo denominatore parziale sia maggiore di 1. A1.74. Sia α > 1 un numero reale. Provare che l’n–esimo convergente dello sviluppo in frazione continua di 1/α `e uguale al reciproco dell’(n − 1) convergente dello sviluppo in frazione continua di α. A1.75. Dimostrare la formula (1.41) a pagina 51. (Suggerimento: procedere per induzione su k.) A1.76. Dimostrare la formula (1.44) a pagina 51. A1.77. Dimostrare per induzione la formula (1.45) a pagina 51. A1.78. Dimostrare il Lemma 1.5.11 a pagina 53. A1.79. Completare i dettagli mancanti della dimostrazione del Teorema 1.5.13 a pagina 55. (Suggerimento: denotando, al solito, con Cn = pn /qn i convergenti della frazione continua [a0 ; a1 , . . . , an , . . .], si provi che, per ogni intero positivo n, si ha α=

αn+1 pn + pn−1 . αn+1 qn + qn−1

(1.56)

Usando la (2.11), se ne deduca che α − Cn =

(−1)n−1 qn (αn+1 qn + qn−1 )

e che quindi limn→∞ Cn = α.) A1.80. Dimostrare che, se n `e un intero positivo che non `e un quadrato perfetto, √ allora n non `e un numero razionale.

A1 Esercizi di carattere teorico

71

A1.81. Dimostrare che la radice √ α di una equazione di secondo grado a coefficienti interi `e della forma α = a + b d, dove d `e un intero positivo e a, b sono razionali. Determinare a, b e d a partire dai coefficienti dell’equazione di secondo grado. (Suggerimento: scrivere la formula risolutiva √ dell’equazione.) Viceversa mostrare che se α = a + b d dove d `e un intero positivo e a, b sono razionali, allora α `e un numero quadratico. A1.82. Provare che se α `e un numero quadratico e a, b, c, d sono numeri razionali tali che cα + d = 0 allora (aα + b)/(cα + d) `e anch’esso un numero quadratico. A1.83. Ricordiamo che se α `e un numero quadratico, se ne pu` o considerare il coniugato α′ . Provare che α = α′ se e solo se α `e un numero razionale. Inoltre se α e β sono numeri quadratici si ha (1) (2) (3) (4)

(α + β)′ = α′ + β ′ ; (α − β)′ = α′ − β ′ ; (αβ)′ = α′ β ′ ; (1/α)′ = 1/α′ .

A1.84. Dimostrare il Teorema 1.5.22 a pagina 61. A1.85. Provare che, per ogni intero positivo n che non `e un quadrato perfetto, il √ √ numero n + [ n] `e ridotto. A1.86.* Sia α un irrazionale e sia α = [a1 ; a2 , a3 , . . . , an , . . .] il suo sviluppo in frazione continua, e ne siano Cn = pn /qn i convergenti. Di due convergenti consecutivi Cn = pn /qn , Cn+1 = pn+1 /qn+1 , uno almeno, diciamo Ci , soddisfa la relazione |α − Ci |
0 non `e un quadrato perfetto, e q divide d − p2 .

72

1 Qualche richiamo sui numeri

A1.90.* Sia α un irrazionale quadratico, sicch´e, per l’esercizio precedente, possiamo scrivere √ p0 + d , α= q0 dove p0 , q0 , d sono interi, q0 = 0, d > 0 non `e un quadrato perfetto, e q0 divide d−p20 . Definiamo ricorsivamente √ d − p2n+1 pn + d , an = [αn ], pn+1 = an qn − pn , qn+1 = . αn = qn qn Si provi che per ogni intero positivo n i numeri pn , qn sono interi, qn = 0 e qn divide d − p2n .

A1.91.* Continuando l’esercizio precedente, si consideri la frazione continua [a0 ; a1 , . . . , an , . . .], denotandone, al solito, con Cn = pn /qn i convergenti. Usando il Teorema 1.5.13, si provi che α = [a0 ; a1 , . . . , an , . . .]. A1.92.* Continuando gli esercizi precedenti, si noti che, per ogni intero positivo n si ha α = [a0 ; a1 , . . . , an , αn+1 ], e dunque vale la (1.56). Passando in quest’ultima ai coniugati (si usi qui l’Esercizio A1.83), si verifichi che ′ =− αn

qn−1 α′ − Cn−1 . qn α′ − Cn

Tenendo conto che limn→∞ Cn = α, dedurne che esiste un intero m tale che per ′ n > m si ha αn < 0. A1.93.* Continuando gli esercizi precedenti, provare che esiste un intero m tale che per n > m si ha qn > 0. Tenendo conto che qn qn+1 = d − p2n+1 < d, dedurne che per ogni n > m si ha qn < d. Similmente notare che per ogni n > m si ha p2n+1 = d − qn qn+1 < d. Dedurne che vi sono infiniti interi i, j tali che (pi , qi ) = (pj , qj ), da cui segue che [a0 ; a1 , . . . , an , αn+1 ] `e periodica. A1.94.* Supponiamo ora che α sia un irrazionale quadratico ridotto. Continuiamo ad usare le notazioni dei precedenti esercizi. Si dimostri, ragionando per induzione, ′ ′ che per ogni intero positivo n si ha −1 < αn < 0. Dedurne che an = [−1/αn+1 ]. Per quanto visto negli esercizi precedenti, sappiamo che esistono interi i, j, con j > i, tali αi = αj , sicch´e si ha pure ai−1 = aj−1 . Se ne deduca che si ha anche αi−1 = αj−1 , e che dunque α = α0 = αj−i . Osservando che α = [a0 ; a1 , . . . , aj−i−1 , αj−i ] = [a0 ; a1 , . . . , aj−i−1 , α], se ne deduca che [a0 ; a1 , . . . , an , . . .] `e puramente periodica. A1.95.* Supponiamo ora che α = [a1 ; a2 , . . . , at ] con Cn = pn /qn convergenti della frazione continua. Poniamo β = [at ; at−1 , . . . , a1 ], e indichiamo con Cn′ = p′n /qn′ i convergenti di quest’ultima frazione continua. Usando (1.41), si provi che pt qt ′ , Ct−1 = . Ct′ = pt−1 qt−1 Se ne deduca che pt = p′t ,

qt′ = pt−1 ,

p′t−1 = qt ,

′ qt−1 = qt−1 .

Tenendo presente l’Esercizio A1.87, si provi che α e −1/β sono soluzioni della stessa equazione a coefficienti interi e dunque sono coniugati. Si noti che, essendo at > 0, si ha β > 1. Dedurne che α `e ridotto.

B1 Esercizi di carattere computazionale

73

B1 Esercizi di carattere computazionale B1.1. Quali sono tutti e soli i numeri naturali n per i quali vale n < 2n ? (a) (b) (c) (d)

Ogni n pari. Ogni n > 0. Ogni n > 1. Nessuna delle precedenti.

Dimostrare l’affermazione corretta per induzione. B1.2. Sia S(n) la somma dei primi n numeri naturali dispari. Quale delle seguenti `e una relazione ricorsiva per calcolare S(n)? (a) (b) (c) (d)

S(n + 1) = S(n) + 2n + 1. S(n + 1) = S(n) + n + 1. S(n + 1) = S(n) + 2n − 1. Nessuna delle precedenti.

B1.3. Sia S(n) la somma dei primi n numeri naturali dispari. Qual `e la formula chiusa per calcolare S(n)? (a) (b) (c) (d)

S(n) = n(n + 1)/2. S(n) = n2 − n + 1. S(n) = n2 . Nessuna delle precedenti.

Dimostrare per induzione la formula trovata. B1.4. Sia S(n) la somma dei primi n numeri interi positivi pari. Quale delle seguenti `e una relazione ricorsiva per calcolare S(n)? (a) (b) (c) (d)

S(n + 1) = S(n) + n + 2. S(n + 1) = S(n) + 2n. S(n + 1) = S(n) + 2n + 2. Nessuna delle precedenti.

B1.5. Sia S(n) la somma dei primi n numeri interi positivi pari. Qual `e la formula chiusa per calcolare S(n)? (a) (b) (c) (d)

S(n) = n(n + 1)/2. S(n) = n2 + 1. S(n) = n(n + 1). Nessuna delle precedenti.

Suggeriamo di procedere per induzione su n. B1.6. Per ogni numero naturale n, quanto vale n 

k=0

(a) n2 + 4n + 1. (b) (2n + 1)(n + 1).

(4k + 1) ?

74

1 Qualche richiamo sui numeri

(c) 3n2 + 2n + 1. (d) Nessuna delle precedenti. Dimostrare per induzione la formula trovata. B1.7. Per ogni intero positivo n, quanto vale la somma dei primi n quadrati n 

k=1

(a) (b) (c) (d)

k 2 = 1 2 + 2 2 + 3 2 + · · · + n2 ?

(n + 1)(2n + 1)/2. (n + 1)(n + 2)(n + 3)/6. n(n + 1)(2n + 1)/6. Nessuna delle precedenti.

Dimostrare per induzione la formula trovata. B1.8. Per ogni intero positivo n, quanto vale la somma dei primi n cubi n 

k=1

(a) (b) (c) (d)

4

3

k 3 = 1 3 + 2 3 + 3 3 + · · · + n3 ?

2

(n + 2n + n )/4. (n4 + 18n3 − 19n2 + 12n)/12. (6n3 − 17n2 + 25n − 12)/2. Nessuna delle precedenti.

B1.9. Per ogni intero positivo n, quanto vale la somma dei cubi dei primi n numeri pari n  (2k)3 = 23 + 43 + · · · + (2n)3 ? k=1

(a) (b) (c) (d)

2n(n + 1)(n + 2)(n + 3). n(n + 1)(n + 2)(n + 3)/3. 2n2 (n + 1)2 . Nessuna delle precedenti.

Dimostrare per induzione la formula trovata. B1.10. Quanto vale n−1  k=0

(a) (b) (c) (d)

3n − 1. 3(3n − 1)/2. 3n+1 − 1. Nessuna delle precedenti.

2 · 3k ?

Dimostrare la formula trovata per induzione. B1.11. Quanto vale

n 

k=0

5 · 9k ?

B1 Esercizi di carattere computazionale (a) (b) (c) (d)

75

4(9n+1 − 1)/5. 5(9n+1 − 1)/8. 5(9n − 1)/4. Nessuna delle precedenti.

Dimostrare la formula trovata per induzione. B1.12. Calcolare gli autovettori della matrice A definita in (1.6). In particolare verificare che (1, λ1 ) e (1, λ2 ) sono autovettori relativi rispettivamente a λ1 e λ2 definiti dalla formula (1.7) a pag. 9. B1.13. Siano C e C −1 le matrici della formula (1.9), D la matrice (1.8) ed A la matrice (1.6). Verificare che C · C −1 = C −1 · C = I, e che C · D · C −1 = A. B1.14. Qual `e la soluzione della progressione geometrica: an = r · an−1 ,

a0 = k,

dove r e k sono interi fissati? (a) (b) (c) (d)

an = krn , per ogni n > 0. an = rkn , per ogni n > 0. an = nkr , per ogni n > 0. Nessuna delle precedenti.

B1.15. Supponiamo che la popolazione mondiale cresca del 3% all’anno. Qual `e la relazione ricorsiva per la popolazione P (n) del mondo? (a) (b) (c) (d)

P (n) = P (n − 1) · 3/100. P (n) = P (n − 1) · 103/100. P (n) = P (n − 1) + 3/100. Nessuna delle precedenti.

B1.16. Supponiamo che nel 2000 la popolazione mondiale sia stata di 5 miliardi di persone e che evolva secondo la relazione ricorsiva dell’Esercizio B1.15. Quanti miliardi di persone ci saranno nel mondo nel 2024? (a) (b) (c) (d)

Circa 50 miliardi. Circa 20 miliardi. Circa 10 miliardi. Nessuna delle precedenti.

B1.17. Dare una formula chiusa per la popolazione di scarabei dell’Esempio 1.2.8. B1.18. Consideriamo l’Esempio 1.2.8 a pag. 11. Supponiamo che in un certo anno ci siano 120 scarabei appena nati e 20 scarabei di due anni. Quanti scarabei ci saranno dopo 10 anni? (a) (b) (c) (d)

180. 140. 120 (di cui 60 appena nati e 60 di un anno). 120 (tutti appena nati).

76

1 Qualche richiamo sui numeri

B1.19. Dare una formula chiusa per la popolazione della Liguria dell’Esempio 1.2.9. B1.20. Consideriamo l’Esempio 1.2.9. Supponiamo che in un certo anno ci siano 5 milioni di abitanti in Liguria e 10 milioni di persone al di fuori. Quanti abitanti ci saranno in Liguria dopo 30 anni? (a) (b) (c) (d)

20 milioni. 10 milioni. 7 milioni. Nessuna delle precedenti.

B1.21. Consideriamo le regioni del piano formate da n rette in posizione generica (tali cio`e che non ci siano rette parallele e tali che tre rette non si incontrino mai in uno stesso punto). Quante sono tali regioni? (a) (b) (c) (d)

n2 + 1. n2 + n − 1. n(n + 1)/2 + 1. Nessuna delle precedenti.

B1.22. Consideriamo le regioni del piano che si formano intersecando n cerchi in posizione generica (tali cio`e che tre cerchi non si intersechino in un punto e due cerchi si intersechino in esattamente due punti). Quante sono tali regioni? (a) (b) (c) (d)

(n3 − 5n2 + 14n − 8)/2. (n2 + 3n − 2)/2. (n3 − 3n2 + 20n − 4)/6. Nessuna delle precedenti.

B1.23. Si provi che `e possibile colorare le regioni formate da un qualunque numero di rette del piano (anche in posizione particolare, e non generica) con solo due colori. Si noti che per colorare si intende assegnare dei colori alle regioni in modo tale che regioni confinanti (ossia con un lato in comune) abbiano colori diversi. B1.24. Marco ha aperto un conto corrente in banca senza spese e con l’interesse nominale del 4% annuo, che viene per` o capitalizzato ogni trimestre (cio`e gli interessi vengono calcolati e depositati sul conto ogni trimestre). Supponiamo che Marco abbia versato una certa quantit` a di denaro all’apertura del conto e che non effettui pi` u n´e depositi n´e prelievi. Qual `e la relazione ricorsiva per determinare quanti soldi S(n) ha Marco sul conto dopo n anni? (a) (b) (c) (d)

S(n) = S(n − 1) · (101/100)4. S(n) = S(n − 1) · 104/100. S(n) = S(n − 1) + 4/100. Nessuna delle precedenti.

B1.25. Consideriamo il conto corrente di Marco come nell’Esercizio B1.24. Supponiamo che Marco abbia versato 5 mila euro all’apertura del conto. Quanti soldi avr` a Marco nel conto dopo 20 anni? (a) (b) (c) (d)

Circa 15 mila euro. Circa 11 mila euro. Circa 9 mila euro. Nessuna delle precedenti.

B1 Esercizi di carattere computazionale

77

B1.26. Calcolare i primi 10 termini a1 , . . . , a10 di ognuna delle seguenti relazioni ricorsive, tutte con valore iniziale a0 = 1: an+1 = an + 3;

an+1 = 3an + 1;

an+1 = 2an − n;

an+1 = a2n − an + 2.

B1.27. Calcolare i termini a2 , . . . , a10 di ognuna delle seguenti relazioni ricorsive, tutte con valori iniziali a0 = a1 = 1: an+2 = 3an+1 − an ;

an+2 = an+1 + an + 1; 2

an+2 = −an+1 + 2an + n ;

an+2 = 2an+1 · an .

B1.28. Qual `e la soluzione della relazione ricorsiva an+2 = an+1 + 2an con valori iniziali a0 = 2 e a1 = 7? (a) (b) (c) (d)

an = 3 · 2n − (−1)n . an = 2n − 1. an = 2n − 3 · (−1)n . Nessuna delle precedenti.

B1.29. Qual `e la soluzione della relazione ricorsiva an = 2an−1 + n + 5 con valore iniziale a0 = 4? (a) (b) (c) (d)

an = 11 · 2n − n − 7. an = 9 · 2n − n − 5. an = 11 · 2n − n + 7. Nessuna delle precedenti.

(Suggeriamo prima di trovare una soluzione della relazione ricorsiva data, senza condizione iniziale, della forma αn + β, dove α e β sono costanti, poi di risolvere la relazione ricorsiva omogenea associata.) B1.30. Qual `e la soluzione della relazione ricorsiva an+1 = 2an con valore iniziale a0 = 3? (a) (b) (c) (d)

an = 3 · 2n . an = 2 n . an = 2n + 3. Nessuna delle precedenti.

B1.31. Qual `e la soluzione della relazione ricorsiva an = 2an−1 + 2n con valore iniziale a0 = 2? (a) an = n2n . (b) an = 2n + 3n .

78

1 Qualche richiamo sui numeri

(c) an = (1 + n)2n . (d) Nessuna delle precedenti. (Suggeriamo prima di trovare una soluzione della relazione ricorsiva data, senza condizione iniziale, della forma nαn , dove α `e costante, poi di risolvere la relazione ricorsiva omogenea associata.) B1.32. Quante mosse devono compiere i sacerdoti del tempio di Brahma per trasferire la torre di Hanoi formata da 64 dischi (vedi Esempio 1.2.10)? (a) (b) (c) (d)

18.446.744.073.709.551.615. 18.446.744.073.709.541.615. 18.446.744.073.709.541.613. Nessuna delle precedenti.

B1.33. Supponendo che i sacerdoti del tempio di Brahma impieghino 30 secondi di tempo per fare una mossa (i dischi sono molto pesanti!), e che abbiano incominciato nel 1999 a.C., fra quanti anni dovrebbe arrivare la fine del mondo? (a) (b) (c) (d)

Circa 1 · 1012 . Circa 1 · 1013 . Circa 2 · 1013 . Nessuna delle precedenti.

B1.34. Qual `e il massimo comun divisore di 491 e 245? (a) (b) (c) (d)

1. 7. 13. Nessuna delle precedenti.

B1.35. Con quanti passi dell’algoritmo euclideo si calcola il M CD(491, 245)? (a) (b) (c) (d)

1. 2. 3. Nessuna delle precedenti.

B1.36. Con quanti passi dell’algoritmo euclideo si calcola il M CD(3072, 165)? (a) (b) (c) (d)

7. 8. 9. Nessuna delle precedenti.

B1.37. Si calcoli il M CD(34567, 457) usando l’algoritmo di cui all’Esercizio A1.40 e si verifichi che termina in soli cinque passi, mentre quello basato sul solito algoritmo della divisione termina in otto passi (cfr. Esempio 2.5.5 a pagina 98). B1.38. Quali sono rispettivamente i coefficienti di 491 e 245 nell’identit` a di B´ezout per il M CD(491, 245), ottenuta con l’algoritmo euclideo? (a) 1 e −2. (b) −1 e 2.

B1 Esercizi di carattere computazionale

79

(c) −244 e 489. (d) Nessuna delle precedenti. B1.39. Qual `e il massimo comun divisore di 28762 e 1515? (a) (b) (c) (d)

3. 7. 1. Nessuna delle precedenti.

B1.40. Con quanti passi dell’algoritmo euclideo si calcola il MCD(28762,1515)? (a) (b) (c) (d)

3. 5. 7. Nessuna delle precedenti.

B1.41. Quali sono rispettivamente i coefficienti di 28762 e 1515 nell’identit` a di B´ezout per il MCD(28762,1515), ottenuta con l’algoritmo euclideo? (a) (b) (c) (d)

−527 e 10005. −1 e 2. −244 e 489. Nessuna delle precedenti.

B1.42. Determinare tutti gli interi x, y che soddisfano l’equazione 92x + 28y = 180. (a) (b) (c) (d)

L’equazione non ha nessuna soluzione intera. (−135 − 7t, 450 + 23t) per ogni intero t. (−135 + 7t, 450 + 23t) per ogni intero t. Nessuna delle precedenti.

B1.43. Determinare tutti gli interi x, y che soddisfano l’equazione 482x + 20y = 35. (a) (b) (c) (d)

L’equazione non ha nessuna soluzione intera. (12 − 7t, −33 + 5t) per ogni intero t. (15 − 7t, −31 + 5t) per ogni intero t. Nessuna delle precedenti.

B1.44. Determinare tutti gli interi x, y che soddisfano l’equazione 1859x + 2057y = 143. (a) (b) (c) (d)

L’equazione non ha nessuna soluzione intera. (37 + 187t, −41 − 169t) per ogni intero t. (−676 + 187t, 611 − 169t) per ogni intero t. Nessuna delle precedenti.

80

1 Qualche richiamo sui numeri

B1.45. A quale successione corrisponde il polinomio x7 − 2x3 + x − 1? (a) (b) (c) (d)

{ 1, 0, 0, −2, 0, 1, −1, 0, . . . }. { 1, 0, 0, 0, −2, 0, 1, −1, 0, . . . }. { −1, 1, 0, −2, 0, 0, 0, 1, 0, . . . }. Nessuna delle precedenti.

B1.46. A quale successione corrisponde il prodotto dei polinomi x2 − 1 e x2 + 1? (a) (b) (c) (d)

{ 1, 0, 2, 0, −1, 0, . . . }. { 1, 0, 1, 0, −1, 0, . . . }. { −1, 0, 0, 0, 1, 0, . . . }. Nessuna delle precedenti.

` vero che il polinomio x2 − 3x4 − 2x + 1 + x3 ∈ Q[x] `e monico? B1.47. E (a) (b) (c) (d)

S`ı, perch´e il suo primo coefficiente `e 1. S`ı, perch´e il coefficiente direttore `e 1. No. Nessuna delle precedenti.

B1.48. Quali sono il quoziente e il resto della divisione in Q[x] del polinomio x4 − 2x3 − 2x − 1 per 2x3 − x − 1? (a) (b) (c) (d)

Il Il Il Il

quoziente quoziente quoziente quoziente

`e `e `e `e

x/2 e il resto `e x2 /2 − 5x/2 − 2. x/2 − 1 e il resto `e x2 /2 − 5x/2 − 2. x/2 − 1 e il resto `e x2 /2 − 3x/2 − 1. x/2 e il resto `e x2 /2 − 3x/2 − 1.

` vero che −x − 1 `e il massimo comun divisore dei polinomi 2x3 − x + 1 e B1.49. E x2 + 2x + 1 in Q[x]? (a) (b) (c) (d)

No, perch´e il massimo comun divisore dei polinomi dati `e 1. No, perch´e −x − 1 non divide 2x3 − x + 1. S`ı. Nessuna delle precedenti.

` vero che 2x + 2 `e un massimo comun divisore dei polinomi 2x4 + x − 1 e B1.50. E 2 x − 1 in Q[x]? (a) (b) (c) (d)

No, perch´e il massimo comun divisore dei polinomi dati `e 1. No, perch´e non `e un polinomio monico. S`ı. Nessuna delle precedenti.

B1.51. Seguendo l’algoritmo euclideo delle divisioni successive, in quanti passi si trova il massimo comun divisore dei polinomi 2x3 − x + 1 e x2 + 2x + 1 in Q[x]? (Ricordiamo che nell’ultimo passo si trova il resto nullo.) (a) (b) (c) (d)

1. 2. 3. 4.

B1 Esercizi di carattere computazionale

81

B1.52. Dire se esistono due polinomi f (x) e g(x) in Q[x] tali che (x2 + 2x + 1)f (x) + (2x3 − x + 1)g(x) = 4x + 4. (a) (b) (c) (d)

No, non esistono, perch´e il MCD di x2 + 2x + 1 e 2x3 − x + 1 `e −x − 1. No, perch´e il MCD di x2 + 2x + 1 e 2x3 − x + 1 `e 1. S`ı, si sa che esistono, ma non c’`e nessun metodo per calcolarli. Nessuna delle precedenti.

B1.53. Qual `e la derivata di 3x3 − 5x5 + 123 − 2x4 in Q[x]? (a) (b) (c) (d)

9x2 + 5x4 − 8x3 . 9x2 − 5x4 − 8x3 . 3x2 − 5x4 − 8x3 . Nessuna delle precedenti.

B1.54. Sia f (x) = 15/7+3x−24/13x3 . Qual `e un polinomio primitivo, a coefficienti interi, associato ad f (x)? (a) (b) (c) (d)

195 + 293x − 168x3 . 195 + 271x − 168x3 . 56x3 − 91x − 65. Nessuno delle precedenti.

B1.55.* Consideriamo l’anello euclideo G dell’Esercizio A1.49 Trovare un massimo comun divisore di 2 e 1 − 5i in G. B1.56. Verificare la formula (1.30) passando in base 10. B1.57. Consideriamo i numeri 100100101110111 e 1101 in base 2. Effettuare la divisione in base 2 passo a passo e trovare il quoziente e il resto. B1.58. Si consideri una numerazione in base b dove b = n2 + 1, con n ∈ N. Scrivere in base b i numeri seguenti: n2 + 2,

n2 + 2n,

(n2 + 2)2 ,

n4 ,

B1.59. Come si scrive il numero (2345)10 in base 3? (a) (b) (c) (d)

10012212. 10111212. 10102212. Nessuna delle precedenti.

B1.60. Come si scrive (234)10 in base 8? (a) (b) (c) (d)

352. 344. 350. Nessuna delle precedenti.

B1.61. Come si scrive il numero (456)8 in base 2? (a) 1001101110. (b) 1001010110.

n2 (n2 + 2)2 .

82

1 Qualche richiamo sui numeri

(c) 100101110. (d) Nessuna delle precedenti. B1.62. Quanto valgono rispettivamente la somma e il prodotto di 10010111 e 11101 in base 2? (a) (b) (c) (d)

10110100, 1001000011011. 11110100, 1010100011011. 11110100, 1000100011011. Nessuna delle precedenti.

B1.63. Determinare rispettivamente somma e prodotto di 12323 e 321 in base 4. (a) (b) (c) (d)

12310, 12023203. 13310, 12023203. 13310, 12022203. Nessuna delle precedenti.

B1.64. Consideriamo i numeri interi in base 21, dove le cifre sono indicate dalle 21 lettere dell’alfabeto A–Z, dove A = 1, B = 2, . . ., V = 20 e Z = 0. Cosa fa la somma e rispettivamente il prodotto di QU I e QU O? (a) (b) (c) (d)

AN T A, LAEQU A. ALT A, N AQT CN . ALT A, N AP T CN . AN T A, N AQT CN .

B1.65. Consideriamo i numeri in base 21, dove le cifre sono indicate dalle 21 lettere dell’alfabeto A–Z, dove A = 1, B = 2, . . ., V = 20 e Z = 0. Cosa fa la somma e rispettivamente la differenza di CASA e CAN E? (a) (b) (c) (d)

F CHF , F BHF , F CHF , F BHF ,

ES. DS. DS. ES.

Suggeriamo di scrivere in una tabella la corrispondenza fra ogni lettera dell’alfabeto e i numeri interi da 0 a 20. B1.66. Determinare la frazione generatrice in base 10 del numero 0, 40. B1.67. Determinare la frazione generatrice in base 10 del numero 55, 35. B1.68. Determinare la frazione generatrice in base 2 del numero 0, 101. B1.69. Determinare la frazione generatrice in base 2 del numero 101, 101101. B1.70. Determinare la frazione generatrice in base 7 del numero 0, 40. B1.71. Determinare la frazione generatrice in base 7 del numero 55, 35. B1.72. Scrivere la frazione 7/3 come numero periodico in base 10. B1.73. Scrivere la frazione 31/5 come numero periodico in base 7. B1.74. Scrivere la frazione 1011/11 come numero periodico in base 2.

C1 Esercizi di programmazione

83

B1.75. Qual `e lo sviluppo in frazione continua di 113/90? (a) (b) (c) (d)

[1; 3, 1, 2]. [1; 3, 1, 10]. [1; 3, 10, 2]. Nessuna delle precedenti.

B1.76. Quale numero razionale `e la frazione continua [1; 3, 1, 4, 1, 1, 2]? (a) (b) (c) (d)

135/107. 133/107. 133/105. Nessuna delle precedenti.

B1.77. Quanto `e lungo lo sviluppo in frazione continua di 350/211? (Supponendo che l’ultimo termine non sia 1.) (a) (b) (c) (d)

6 termini. 5 termini. 4 termini. Nessuna delle precedenti.

B1.78. Provare che



3 = [1; 1, 2].

B1.79. Provare che



5 = [2, 4].

B1.80. Provare che lo sviluppo in frazione continua del rapporto aureo `e [1; 1]. B1.81. Trovare il numero positivo corrispondente alla frazione continua semplice periodica [4; 1, 3]. √ B1.82. Qual `e lo sviluppo in frazione continua di 27? (a) (b) (c) (d)

[5; 5]. [5; 6]. [5; 10]. Nessuna delle precedenti.

C1 Esercizi di programmazione C1.1. Scrivere un programma che calcoli il fattoriale di un numero intero positivo. C1.2. Scrivere un programma che calcoli i binomiali. C1.3. Si consideri la seguente relazione ricorsiva: an+k = b1 an+k−1 + b2 an+k−2 + · · · + bk an + d(n), dove i bi sono costanti, d(n) `e una funzione arbitraria di n e i valori iniziali sono a1 = α1 , a2 = α2 , . . . , ar = αr . Si scriva un programma che calcoli il termine an .

84

1 Qualche richiamo sui numeri

C1.4. Si scriva un programma che calcoli i numeri di Fibonacci. C1.5. Si scriva un programma che determini se un dato intero n `e un numero di Fibonacci. Si utilizzi tale programma per verificare gli Esercizi A1.30, A1.66 e A1.33. C1.6. Scrivere un programma che calcoli il massimo comun divisore di due interi a e b utilizzando l’algoritmo euclideo delle divisioni successive. C1.7. Scrivere un programma che calcoli il massimo comun divisore di due interi a e b utilizzando l’algoritmo suggerito nell’Esercizio A1.40. C1.8. Scrivere un programma che calcoli una identit` a di B´ezout per due numeri interi a e b, cio`e che esprima il massimo comun divisore di due numeri a e b nella forma αa + βb per opportuni α e β in Z, seguendo il procedimento dell’algoritmo euclideo. C1.9. Si scriva un programma che calcoli il massimo comun divisore di due numeri di Fibonacci, e si verifichino con tale programma gli Esercizi A1.64 e A1.65. C1.10. Si scriva un programma che esprima ogni intero n come somma di numeri di Fibonacci distinti (cfr. Esercizio A1.31). C1.11. Si scriva un programma che calcoli, dati due interi a e b, con a ≥ b, il numero di divisioni necessarie per portare a termine l’algoritmo euclideo (cfr. Esercizio A1.69). C1.12. Si scriva un programma che esegua la divisione tra due polinomi dati, calcolando il polinomio quoziente e il resto. C1.13. Si scriva un programma che calcoli il massimo comune divisore tra due polinomi f (x) e g(x) su un campo mediante l’algoritmo euclideo delle divisioni successive. C1.14. Si scriva un programma che calcoli un’identit` a di B´ezout d(x) = f (x)h(x) + g(x)k(x) di due polinomi f (x) e g(x), dove d(x) `e il loro massimo comune divisore. C1.15. Scrivere un programma che calcoli la derivata n-esima di un polinomio dato. C1.16. Scrivere un programma che converta la scrittura dei numeri interi in base 10 in quella in base un numero intero qualunque b > 1 e viceversa. C1.17. Scrivere un programma che, per ogni data frazione, ne determini la scrittura decimale determinandone periodo e antiperiodo. C1.18. Scrivere un programma che calcoli lo sviluppo in frazione continua di un qualunque numero razionale. C1.19. Scrivere un programma che calcoli i convergenti di una frazione continua infinita, con una data approssimazione del numero irrazionale rappresentato dalla frazione continua. √ C1.20. Scrivere un programma che calcoli lo sviluppo in frazione continua di n per un intero positivo n.

2 Complessit` a computazionale

2.1 Il concetto di complessit` a computazionale Nel Capitolo 1 abbiamo ricordato alcune nozioni basilari relative ai numeri naturali, interi, razionali, ecc., e alle operazioni tra numeri. La necessit` a di risolvere problemi concreti porta, come abbiamo visto nel § 1.2, a costruire modelli matematici, nell’ambito dei quali si pone la questione di eseguire procedure di calcolo, talvolta assai complesse, ma che comunque in un numero finito di passi portino alla soluzione dei problemi in questione. Tali procedure vengono dette algoritmi , dal nome del matematico e astronomo arabo al-Khowarizmi, vissuto nel secolo IX. La questione fondamentale, che `e opportuno proporre qui subito, `e: quanto costa un algoritmo, in termini di fatica e di tempo spesi per seguirne i passi e portare a termine le operazioni che esso prevede? Ad esempio, se, per fare questi calcoli, usiamo un computer, quanto costa un dato algoritmo, in termini di tempo di calcolo e di difficolt` a di programmazione? Possiamo distinguere, in modo matematicamente sensato, gli algoritmi buoni, cio`e quelli che richiedono poco tempo e poca fatica di programmazione, da quelli che richiedono troppo tempo, in termini relativi o assoluti, per la loro effettuazione? Da quanto detto risulta che un algoritmo non `e altro che una successione finita di operazioni elementari. Dunque, per rispondere alle domande dianzi poste, ossia per determinare la complessit` a computazionale di un dato algoritmo, occorre calcolare con precisione il numero di operazioni basilari di cui si compone l’algoritmo. Moltiplicando tale numero per il tempo necessario per programmare o effettuare una singola operazione elementare con i mezzi di calcolo a disposizione, si ottiene la misura del tempo totale occorrente per eseguire i calcoli previsti dall’algoritmo in questione, ossia quella che si chiama la complessit` a spaziale dell’algoritmo. Si noti che, mentre la complessit` a computazionale `e un dato intrinseco dell’algoritmo, la complessit` a spaziale `e influenzata in modo determinante dalle caratteristiche dei mezzi di calcolo di cui disponiamo. In ogni caso, il tempo computazionale di un algoritmo `e pro-

86

2 Complessit` a computazionale

porzionale alla sua complessit`a computazionale e il fattore di proporzionalit` a `e determinato dalle caratteristiche dei mezzi di calcolo. Noi ci occuperemo esclusivamente della complessit` a computazionale, non di quella spaziale, perch´e il calcolo della prima richiede essenzialmente nozioni matematiche, mentre quello della seconda rientra nel dominio dell’informatica. Dunque d’ora in poi quando parleremo di tempo intenderemo sempre tempo computazionale. L’importanza del concetto di complessit` a computazionale `e evidente. Esso ad esempio consente di distinguere tra: • algoritmi che `e possibile eseguire in un tempo ragionevole con gli strumenti di calcolo a nostra disposizione; • algoritmi che non `e possibile eseguire in un tempo ragionevole con gli strumenti di calcolo a nostra disposizione, ad esempio a mano, ma che `e possibile eseguire in un tempo ragionevole con strumenti di calcolo pi` u raffinati, di cui anzi possiamo stimare la potenza, cio`e la capacit`a di eseguire una singola operazione elementare in tempo sufficientemente breve; • algoritmi possibili solo in teoria, perch´e dal punto di vista operativo richiedono, per la loro esecuzione, un tempo in assoluto troppo lungo o comunque eccedente quello a nostra disposizione, qualunque sia il mezzo di calcolo a nostra disposizione. L’unit` a usata per calcolare la complessit` a di un algoritmo `e la operazione bit, la quale, in sostanza, corrisponde ad una operazione elementare costituente l’algoritmo. Introduciamo in dettaglio tale concetto. Limiteremo la nostra discussione ad algoritmi che operano sui numeri interi. Per effettuare le operazioni relative ad un algoritmo conveniamo allora di scrivere i numeri interi in base 2. Il motivo di ci` o `e che questo `e quel che si fa quando si opera al computer e riteniamo che di norma effettueremo i nostri calcoli usando un computer. Vedremo inoltre ben presto che questa scelta non cambia, in un senso che renderemo subito preciso, la complessit` a degli algoritmi. Dunque scriveremo un numero n come n = (ak−1 . . . a0 )2 o semplicemente come n = ak−1 ak−2 . . . a0 k−1 i se n = i=0 2 ai , dove ai = 0, 1, e i = 0, . . . , k − 1. Gli ai sono detti cifre binarie. Per operazione bit intendiamo una delle seguenti operazioni elementari: (1) (2) (3) (4)

addizione fra due cifre binarie (es. 0 + 1); sottrazione fra due cifre binarie (es. 1 − 0); moltiplicazione fra due cifre binarie (es. 1 · 1); divisione di un intero a due cifre binarie per una cifra binaria (es. 10 diviso 1);

2.2 Il simbolo O

87

(5) traslazione a sinistra di un posto, cio`e moltiplicazione per 2, ad esempio (1, 1, 1) diventa (1, 1, 1, 0), e traslazione a destra di un posto, cio`e divisione per 2. ` chiaro che ognuna delle quattro operazione sugli interi `e data da una E successione di operazioni bit. Dunque ogni algoritmo `e dato da una successione di operazioni bit. Pertanto: Definizione 2.1.1. La complessit` a computazionale di un algoritmo che opera sugli interi `e data dal numero di operazioni bit occorrenti per eseguirlo. Notiamo che la complessit`a computazionale di un algoritmo non `e un numero, ma una funzione. Infatti essa dipende, in generale, dagli interi su cui opera l’algoritmo. In altre parole, c’`e da aspettarsi che pi` u grandi siano gli interi su cui l’algoritmo opera, maggiore sia il numero di operazioni bit occorrenti per eseguire l’algoritmo, e dunque maggiore ne sia la complessit`a. Su questo essenziale concetto della dipendenza di un algoritmo dai numeri su cui opera torneremo tra breve nel § 2.3. Di norma non si `e interessati nel calcolo esatto della complessit`a di un algoritmo, bens`ı in una sua ragionevole stima superiore. Questo `e infatti quel che ci occorre per valutare il tempo che `e necessario per eseguire l’algoritmo. Per dare tale stima in modo efficiente, cio`e senza sprechi e senza inutili ridondanze, si usa la notazione O, comunemente detto big o, introdotta da P. Bachmann nel 1894. Essa viene introdotta nel seguente paragrafo. Un ulteriore avvertimento: per ora ci siamo limitati a dare il concetto di complessit`a computazionale per un algoritmo che opera sugli interi. Pi` u avanti estenderemo tale nozione ad algoritmi che operano su altri oggetti, ad esempio su polinomi o su elementi di un campo (cfr. § 2.5.3, § 5.1.14).

2.2 Il simbolo O L’importanza del simbolo O risiede nel fatto che esso evidenzia in modo semplice e diretto, come illustreremo in dettaglio fra poco, il comportamento asintotico di una data funzione. Definizione 2.2.1. Siano f e g due funzioni a valori positivi, definite su un sottoinsieme S di R contenente N. Diremo che f `e dominata da g (o che g domina f ) se esistono costanti k e c in R tali che f (x) ≤ k · g(x),

per ogni x ∈ S, con x > c.

(2.1)

Indicheremo con O(f ) l’insieme delle funzioni dominate da f , cio`e quelle che crescono non pi` u velocemente di f . Se g ∈ O(f ) si dice che g `e di classe O(f ) e che si `e data una stima di tipo O della funzione g mediante la funzione di riferimento f . Notiamo che, se f ∈ O(g) e g ∈ O(h), allora f ∈ O(h) (cfr. Esercizio A2.1).

88

2 Complessit` a computazionale

Nello scrivere f ∈ O(g), non si cerca di solito di determinare il valore minimo della costante k per cui vale la (2.1) in quanto si `e interessati, in linea di principio, a dare soltanto una stima di riferimento per la funzione f (x). Solo in questioni pi` u raffinate si prende in considerazione il problema di migliorare le costanti. Facciamo degli esempi con S = N. Esempio 2.2.2. Sia f = n4 e g = n4 + 8n2 + 5n + 10. Allora f ∈ O(g), con k = 1 e c = 0. Inoltre anche g ∈ O(f ), con k = 24 e c = 0. Infatti si ha che 8n2 + 5n + 10 > 0 per ogni n ∈ N, quindi f (n) = n4 < 1 · (n4 + 8n2 + 5n + 10) = 1 · g(n)

∀n ∈ N.

Inoltre si verifica che, per ogni n ∈ N,

g(n) = n4 + 8n2 + 5n + 10 < n4 + 8n4 + 5n4 + 10n4 = 24n4 ,

quindi g(n) < 24 · f (n) per ogni n.

Esempio 2.2.3. Sia f (n) = n2 log n. Allora f ∈ O(n3 ). Infatti `e ben noto che se α `e un numero reale positivo, allora lim

x→∞

log x = 0. xα

Dunque esiste c tale che log n ≤ n per ogni n > c.

Il simbolo O si presta bene ad esprimere propriet` a relative al comportamento asintotico delle funzioni. Nel seguito supporremo che le funzioni considerate abbiano lo stesso dominio di definizione S, riducendoci, se necessario, all’intersezione dei domini di definizione, in modo da poter parlare di funzioni somma e prodotto, ecc. Date due funzioni f e g riassumiamo nella seguente tabella le varie possibilit` a (cfr. Esercizi A2.3, A2.2, A2.4): ∃ finito lim

n→∞

f (n) = a = 0 f ∈ O(g) e g ∈ O(f ), g(n) cio`e f e g sono dello stesso ordine;

lim

f (n) =∞ g(n)

lim

f (n) =0 g(n)

n→∞

n→∞

∄ lim

n→∞

f (n) g(n)

g ∈ O(f ), cio`e f domina g, e si dice che f `e un infinito di ordine superiore rispetto a g; f ∈ O(g), cio`e g domina f, e si dice che g `e un infinito di ordine superiore rispetto a f ; non si pu` o dire nulla, n´e che g ∈ O(f ), n´e che

Facciamo ancora degli esempi illustrativi.

g∈ / O(f ).

2.2 Il simbolo O

89

Esempio 2.2.4. (1) Se f (n) = n2 + 1 e g(n) = n3 , allora f ∈ O(g) poich´e limn→∞ (n2 + 1)/n3 = 0. ` chiaro che g ∈ O(n2 ), e che f = n2 ∈ O(g) e (2) Sia g(n) = (2 + (−1)n )n2 . E non esiste il limite del rapporto (2 + (−1)n )n2 = 2 + (−1)n . n2 (3) Si considerino le funzioni f (n) = (n+1)+n(−1)n e g(n) = (n+1)−n(−1)n . Allora non esistono i limiti dei rapporti f /g e g/f . Inoltre g ∈ / O(f ) e f∈ / O(g). Infatti le funzioni f e g sono tali che   2n + 1 se n `e pari, 1 se n `e pari, f (n) = g(n) = 1 se n `e dispari, 2n + 1 se n `e dispari, e ci`o implica che nessuna delle due funzioni domina l’altra. Il risultato seguente d` a alcune utili propriet` a del simbolo O in relazione alle principali operazioni algebriche sulle funzioni. Teorema 2.2.5. Se f ∈ O(g) e c > 0, allora c · f ∈ O(g). Inoltre, se f1 ∈ O(g1 ) e f2 ∈ O(g2 ), allora f1 + f2 ∈ O(g1 + g2 ),

f1 · f2 ∈ O(g1 · g2 ).

In particolare se f1 ∈ O(g) e f2 ∈ O(g), allora f1 + f2 ∈ O(g). Dimostrazione. A titolo di esempio dimostriamo solamente che se f1 ∈ O(g1 ) e f2 ∈ O(g2 ), allora f1 + f2 ∈ O(g1 + g2 ). Sia S l’insieme di definizione di f1 e f2 . Poich´e f1 ∈ O(g1 ) e f2 ∈ O(g2 ), esistono costanti k1 , k2 , c1 , c2 per cui f1 (x) ≤ k1 · g1 (x), f2 (x) ≤ k2 · g2 (x),

per ogni x ∈ S, con x > c1 , per ogni x ∈ S, con x > c2 .

Se definiamo k = max(k1 , k2 ) e c = max(c1 , c2 ), allora `e chiaro che (f1 + f2 )(x) ≤ k · (g1 + g2 )(x),

per ogni x ∈ S, con x > c,

che dimostra la formula cercata. Nel caso particolare in cui sia f1 ∈ O(g) e f2 ∈ O(g), allora f1 +f2 ∈ O(2·g) e, per la prima asserzione del Teorema 2.2.5, 2 · g ∈ O(g), da cui segue il risultato. ⊓ ⊔ Esempio 2.2.6. Sia f1 (n) = n + 3 log n e f2 (n) = 5n log n + 28n3 . Allora f1 · f2 ∈ O(n4 ), poich´e n + 3 log n ∈ O(n) e 5n log n + 28n3 ∈ O(n3 ).

90

2 Complessit` a computazionale

Notiamo che stime di tipo O vengono usate nella vita di tutti i giorni, laddove, invece che di un dato preciso, ci possiamo accontentare di conoscere l’ordine di grandezza del dato in questione. Ad esempio, per attraversare una strada diremo che vanno percorsi una decina di metri, non intendendo con ci` o che i metri in questione sono esattamente 10, bens`ı 10, 20, 30 o gi` u di l`ı. Se invece dobbiamo recarci da Roma a Torino diremo che occorre percorrere alcune centinaia di chilometri e cos`ı via. Appare dunque naturale fornire stime di tipo O anche per la complessit` a di un algoritmo. In tal caso, dire che un algoritmo, che dipende da n dati, ha una complessit` a fornita dalla funzione f (n), con f ∈ O(g), significa che, per n sufficientemente grande, il numero di operazioni bit richieste per eseguire l’algoritmo non `e mai superiore a k · g(n) per qualche costante k. Poich´e il tempo computazionale `e proporzionale alla complessit` a computazionale, anche il tempo non `e superiore a k·g(n) per qualche costante k. In genere si avr`a cura si scegliere la funzione di riferimento g(n), che ovviamente non `e univocamente determinata, in modo che sia semplice da calcolare. Ad esempio se abbiamo valutato la complessit`a di un algoritmo mediante la funzione n4 +8n2 +5n+10, `e naturale scegliere come funzione di riferimento la funzione g = n4 e quindi dire che la complessit` a dell’algoritmo in questione `e O(n4 ).

2.3 Tempo polinomiale, tempo esponenziale In questo paragrafo cominciamo col chiarire il concetto essenziale, appena toccato alla fine del § 2, di dipendenza della complessit` a di un algoritmo dagli interi su cui esso opera. Come abbiamo accennato, pi` u grandi sono gli interi su cui un dato algoritmo opera, maggiore ci aspettiamo sia il numero di operazioni bit occorrenti per eseguire l’algoritmo, e dunque maggiore sia la complessit`a. In altre parole ci aspettiamo che la complessit`a di un algoritmo sia funzione della grandezza dei numeri su cui esso opera. Per dare un senso matematico a questa considerazione `e opportuno introdurre un concetto, quello di lunghezza di un numero, che `e in sostanza la misura della grandezza di un numero. Definizione 2.3.1. Sia n un intero e β un intero maggiore di 1. Chiamiamo lunghezza Lβ (n) di n in base β il numero k tale che valga la formula β k−1 ≤ n < β k ,

(2.2)

k−1 cio`e n = i=0 ai β i = (ak−1 , . . . , a0 )β , con ak−1 = 0. La scrittura L(n) senza pedice indicher` a la lunghezza del numero n in base 2, cio`e L(n) = L2 (n). Esempio 2.3.2. Si ha L10 (205) = 3 mentre L2 (205) = 8 poich´e 205 = (11001101)2 .

2.3 Tempo polinomiale, tempo esponenziale

91

In particolare per la (2.2) passando ai logaritmi si ottiene k − 1 ≤ logβ n < k e quindi Lβ (k) = [logβ n] + 1

e

Lβ (n) ∈ O(logβ n).

Ci` o si esprime dicendo che la lunghezza di un intero n in una base β fissata, cio`e il numero di cifre che servono per rappresentare l’intero in quella base, `e di taglia logβ n. Bench´e la lunghezza di un numero ovviamente dipenda dalla base in cui lo si esprime, `e notevole il fatto che se ne pu`o dare una stima di tipo O indipendente dalla base. Ricordiamo infatti la ben nota relazione tra logaritmi in basi diverse logα n . logβ n = logα β Dunque, se con log n senza pedice indichiamo il logaritmo naturale, cio`e quello in base e, otteniamo log n logβ n = . log β Utilizzando questa relazione, si ha Lβ (n) =



 log n +1 log β

(2.3)

e perci`o, se supponiamo la base β, in cui si esprimono i numeri, assegnata una volta per tutte, e dunque costante, si ha Lβ (n) ∈ O(log n).

(2.4)

Ora supponiamo di avere un algoritmo A che opera su interi n1 , . . . , ns e indichiamo con T (A) la complessit` a di A, dove la lettera T sta per tempo. Si noti che T (A) `e maggiorata da una funzione della massima lunghezza degli interi n1 , . . . , ns nella base in cui operiamo. Dunque, se n `e un maggiorante di n1 , . . . , ns , potremo maggiorare T (A) mediante una funzione di log n. Ora possiamo tornare su un altro punto importante toccato nel § 2. Nell’effettuare dei calcoli con un qualunque strumento, occorre tener conto del tempo che richiedono gli algoritmi per essere effettuati: ve ne sono di quelli che richiedono un tempo ragionevole e altri che non hanno questa propriet` a. Possiamo dare ora un senso matematico compiuto a questa affermazione. A tale scopo `e bene ricordare che, dal punto di vista asintotico, una funzione polinomiale cresce molto pi` u lentamente di una funzione esponenziale. In altri termini, se abbiamo una funzione f (n) ∈ O(nk ), possiamo dire che f (n) ∈ O(an ) qualunque sia l’intero positivo k e qualunque sia il numero reale a > 1 (cfr. Tabella 2.1 a pag. 108). Su questa semplice osservazione sono basate le seguenti due definizioni che sono di fondamentale importanza nello studio degli algoritmi.

92

2 Complessit` a computazionale

Definizione 2.3.3. Un algoritmo A per eseguire un calcolo su numeri interi si dice di tempo polinomiale, o semplicemente polinomiale, se esiste un intero positivo d, detto ordine dell’algoritmo, tale che il numero di operazioni bit necessarie per eseguire l’algoritmo su interi di lunghezza binaria al pi` u k `e O(k d ). Da quanto precede allora, abbiamo che A `e polinomiale se T (A) ∈ O((log n)d ) dove n `e il massimo intero su cui A opera. Definizione 2.3.4. Un algoritmo si dice di tempo esponenziale, o semplicemente esponenziale, se il numero di operazioni bit necessarie per eseguire l’algoritmo su interi di lunghezza binaria al pi` u k `e dello stesso ordine di eck , per una costante c > 0 (cfr. pag. 88). Un algoritmo non esponenziale si dice subesponenziale se il numero di operazioni bit necessarie per eseguire l’algoritmo su interi di lunghezza binaria al pi` u k `e O(ek ). Ad esempio, A `e esponenziale se T (A) `e dello stesso ordine di n, dove n `e il massimo intero su cui A opera. Invece un algoritmo che richiede f (k) = ek/log(log k) operazioni `e subesponenziale. Infatti lim

k→∞

f (k) =0 ek

e quindi f (k) ∈ O(ek ) ma eck ∈ / O(f ), per ogni c > 0, e pertanto non `e esponenziale. Un tipico algoritmo esponenziale `e quello del cosiddetto crivello di Eratostene, che si studia fin dalle scuole inferiori, e che serve a determinare se un numero `e primo o per fattorizzare un intero. Su ci` o torneremo nel Capitolo 4. In pratica, la differenza tra un algoritmo di tempo polinomiale e uno di tempo esponenziale `e questa. Supponiamo di dover operare su numeri molto grandi, altrimenti possiamo fare i conti a mente o a mano e non abbiamo bisogno di fare troppe distinzioni. Allora, se un algoritmo `e polinomiale, possiamo aspettarci che esso sia effettuabile, magari non a mente o a mano, ma usando adeguati strumenti di calcolo, in un tempo ragionevole. Invece, se l’algoritmo `e di tempo esponenziale, non si riesce, in generale, anche usando i computer pi` u potenti esistenti, ad avere la risposta in tempi ragionevoli: potrebbe infatti non bastare l’intera vita dell’universo! In altre parole gli algoritmi polinomiali sono quelli ragionevoli, mentre quelli esponenziali non lo sono. Si noti che ci sono anche altri tipi di complessit`a, come ad esempio quella fattoriale, a cui appartengono algoritmi che richiedono un tempo dell’ordine di k!, dove k `e la lunghezza del massimo intero su cui l’algoritmo opera. Esempio 2.3.5. Sia t il tempo richiesto per effettuare un’operazione bit. Se un algoritmo `e polinomiale di ordine 2, e se vogliamo operare con esso su numeri alquanto grandi, ad esempio dell’ordine di 10100 , il tempo occorrente per effettuare l’algoritmo sar` a limitato da 10000 · C · t dove C `e una opportuna

2.4 Complessit` a delle operazioni elementari

93

costante. Osserviamo che t dipende dalla potenza del mezzo di calcolo e pu` o essere reso molto piccolo. Ad esempio `e realistico assumere t = 10−9 secondi sicch´e 10000 · C · t = 10−5 · C e si vede dunque in che senso `e da intendersi la frase: il tempo occorrente per effettuare l’algoritmo `e ragionevole. Si noti tuttavia che maggiore `e l’ordine dell’algoritmo, minore ne `e la convenienza. Ad esempio, se l’algoritmo fosse gi`a di ordine 10, la stima del tempo occorrente per effettuarlo su numeri dell’ordine di 10100 sarebbe di 1011 · C secondi, e se C non `e proprio piccolo, questo `e un tempo ragguardevole (cfr. l’Esercizio B2.15 e la tabella 2.1 a pag. 108). Se abbiamo invece un algoritmo esponenziale e se vogliamo operare con a dell’ordine di esso su numeri dell’ordine di 10100 , il tempo occorrente sar` 10100 · t. Pur se migliorassimo sostanzialmente le prestazioni dei nostri computer, portando ad esempio ad essere t = 10−20 , avremmo 10100 · t = 1080 , e questo `e un numero altissimo: per rendersi conto dell’ordine di grandezza, si pensi che il numero di protoni nell’universo `e un numero a 79 cifre decimali. Inoltre `e chiaro che, comunque miglioriamo le capacit` a dei nostri computer, un algoritmo esponenziale non ci metter` a mai in grado di operare con numeri molto grandi. Va tuttavia sottolineato che anche un algoritmo esponenziale pu` o essere praticabile, e talvolta migliore di uno polinomiale, se lo si applica a numeri piccoli. Un tipico esempio `e il gi` a citato crivello di Eratostene col quale a scuola abbiamo imparato a fattorizzare numeri bassi.

2.4 Complessit` a delle operazioni elementari Esamineremo ora la complessit` a delle operazioni elementari. La complessit` a di un qualunque algoritmo si ottiene applicando i risultati di questo paragrafo. Ricordiamo la notazione T (A) per indicare la complessit` a di un algoritmo A. Ad esempio indicheremo con T (a + b) [risp. T (a − b), T (a · b), T (a/b) ecc.] la complessit`a dell’algoritmo che effettua la somma [risp. la differenza, il prodotto, che trova il quoziente, ecc.] di due interi a e b. Proposizione 2.4.1. Siano a e b due interi positivi a=

k−1  i=0

ai · 2i = ak−1 . . . a0 ,

b=

l−1  i=0

bi · 2i = bl−1 . . . b0

di lunghezza L(a) = k, L(b) = l rispettivamente, con k ≥ l. Allora valgono le seguenti relazioni:  max(L(a), L(b)) oppure L(a + b) = (2.5) max(L(a), L(b)) + 1,  L(a) + L(b) = k + l oppure L(a · b) = (2.6) L(a) + L(b) − 1 = k + l − 1,

94

2 Complessit` a computazionale

T (a ± b) ∈ O(k), T (a · b) ∈ O(L(a) · L(b)) = O(k · l), a T ∈ O(L(a) · L(b)) = O(k · l). b

(2.7) (2.8) (2.9)

Dimostrazione. Si hanno le seguenti disuguaglianze: 2k−1 ≤ 2k−1 + 2l−1 ≤ a + b < 2k + 2l ≤ 2k+1 , 2k+l−2 ≤ a · b < 2k+l .

Di qui seguono immediatamente le stime per L(a + b) e per L(a · b). Siano inoltre q e r il quoziente e il resto della divisione di a per b cio`e a = qb + r, con 0 ≤ r < b. Se b > a, allora L(q) = 0, mentre se b ≤ a, allora L(a) = L(qb + r). Quindi da quanto precede si ha immediatamente che L(a) − L(b) − 1 ≤ L(q) ≤ L(a) − L(b) + 1. Calcoliamo ora la complessit` a delle operazioni elementari. Aggiungendo eventualmente delle cifre nulle davanti al numero minore, possiamo anche assumere che a e b abbiano lo stesso numero di cifre, e bench´ k−1 non necessariamente la stessa lunghezza. Cio`e possiamo scrivere b = i=0 bi · 2i = bk−1 . . . b0 , con bi = 0 se k ≥ l. Ricordiamo che la somma `e data da a+b=

k−1  i=0

(ai + bi ) · 2i = (ak−1 + bk−1 , . . . , a0 + b0 )

e quindi per calcolare la somma dobbiamo calcolare ai + bi , per 0 ≤ i ≤ k − 1. Il calcolo di ai + bi corrisponde ad una operazione bit, quindi per calcolare a + b dobbiamo fare almeno k operazioni bit. C’`e ancora per` o da tener conto, come sappiamo dal § 1.4.3, di eventuali riporti. Questo fa aumentare il numero di operazioni bit richieste, ma non di tanto. Infatti occorrer` a fare, per ogni i = 1, . . ., k, due operazioni bit: la somma ai + bi e la somma del numero cos`ı ottenuto con il riporto, eventualmente nullo, che viene dalla somma precedente ai−1 +bi−1 . In definitiva per calcolare a+b dobbiamo fare al pi` u 2k operazioni bit. Notiamo che l’operazione di tener conto del riporto non viene da noi considerata un’operazione bit, perch´e si tratta di un immagazzinamento di dati che `e trascurabile rispetto all’effettuazione di una operazione bit. In definitiva dunque abbiamo T (a + b) ∈ O(k) = O(max(L(a), L(b)). In modo analogo si pu` o vedere (cfr. Esercizio A2.12) che T (a − b) ∈ O(k) = O(max(L(a), L(b)). Supponiamo ora di volere moltiplicare a e b. Ricordiamo dal § 1.4.3 che, per effettuare la moltiplicazione in questione, occorre fare, in sostanza, la

2.5 Algoritmi e complessit` a

95

somma di l numeri, ottenuti da a moltiplicandolo per le successive cifre di b e spostando le cifre del risultato di volta in volta verso sinistra inserendo altrettanti 0 a destra. Si tratta dunque di effettuare l − 1 somme di numeri di lunghezza al pi` u k + l − 1. Tuttavia, tutti questi numeri finiscono con una stringa di zeri, la cui addizione al numero precedente non richiede operazioni bit. Perci` o il numero di operazioni bit richieste si stima, in definitiva, con quello richiesto per effettuare la somma di l − 1 numeri di lunghezza k. Da qui, per quanto abbiamo gi` a visto, si deduce che T (a · b) ∈ O((l − 1)k) = O(lk) = O(L(a) · L(b)). Affrontiamo ora il problema di dare una stima della complessit` a computazionale della divisione, cio`e di determinare il quoziente q ed il resto r della divisione di a per b. La situazione `e analoga a quella della moltiplicazione. Osserviamo che quando si fanno le divisioni in base due non c’`e bisogno di procedere per tentativi: ad ogni passo la cifra del quoziente corrispondente sar` a 0 o 1, a seconda che il divisore sia maggiore del dividendo o meno: il calcolatore deve solo confrontare i due numeri e questo richiede un tempo trascurabile rispetto al tempo di una operazione bit. Se a < b, allora il quoziente q `e zero e r = a. Supponiamo dunque a ≥ b. Per trovare q e r dobbiamo calcolare la prima cifra di q, che sar`a necessariamente 1, e dobbiamo poi moltiplicare 1 · b (operazione di complessit` a O(l)), e procedere alla sottrazione del numero ottenuto dalle prime l cifre di a (operazione di complessit` a O(l)). Dunque il tempo richiesto per questo primo passo `e O(2l). Quante volte dobbiamo iterare questo passo? Tante quante la lunghezza di q, che abbiamo gi` a visto essere al pi` u k − l + 1. In definitiva abbiamo a ∈ O(2l(k − l + 1)) = O(L(a) · L(b)), T b poich´e k = L(a) ≥ L(b) = l. ⊓ ⊔

2.5 Algoritmi e complessit` a In questo paragrafo calcoleremo la complessit`a computazionale di alcuni algoritmi gi` a descritti nel Capitolo 1 e introdurremo alcuni nuovi algoritmi calcolandone la relativa complessit` a. Altri algoritmi verranno proposti negli esercizi. 2.5.1 Complessit` a dell’algoritmo di Euclide Stimiamo la complessit`a dell’algoritmo M CDE (a, b) di Euclide per la determinazione del massimo comun divisore di due interi a e b. Quando abbiamo introdotto l’algoritmo euclideo nel paragrafo 1.3, abbiamo osservato che esso termina sicuramente in al pi` u b passi. Con questa stima per il numero

96

2 Complessit` a computazionale

div(a, b) di divisioni necessarie per condurre a termine l’algoritmo, ci troviamo per`o in un bel pasticcio, perch´e dovremmo concludere che siamo di fronte ad un algoritmo di tempo esponenziale, e quindi intrattabile, in quanto la sua complessit`a sarebbe O(bL(a)2 ) = O(2log2 b L(a)2 ) = O(2L(b) L(a)2 ), dove O(L(a)2 ) stima, per la Proposizione 2.4.1, il costo di ogni divisione. Dobbiamo dunque migliorare la stima del numero div(a, b). Premettiamo il seguente lemma, che determina div(a, b) nel caso particolare in cui i numeri a e b siano due numeri di Fibonacci consecutivi. Lemma 2.5.1. Sia fn l’n-esimo numero di Fibonacci. Il numero delle divisioni necessarie per calcolare il M CD(fn+1 , fn ) con l’algoritmo euclideo `e n − 1. Dimostrazione. Si ha fn+1 = fn · 1 + fn−1 , fn = fn−1 · 1 + fn−2 ,

fn−1 = fn−2 · 1 + fn−3 , .. . f4 = f3 · 1 + f2 , f3 = f2 · 2 + f0 .

0 < fn−1 < fn , 0 < fn−2 < fn−1 , 0 < fn−3 < fn−2 ,

0 < f2 < f3 ,

Ricordando che f0 = 0, allora M CD(fn+1 , fn ) = f2 = 1 e ci sono esattamente n − 1 divisioni da fare per calcolare tale massimo comun divisore. ⊓ ⊔ L’algoritmo di Euclide che abbiamo descritto ha come input la coppia (fn+1 , fn ) e procede poi per n − 1 passi, come mostra in modo efficace il diagramma (fn+1 , fn ) → (fn , fn−1 ) → · · · → (f3 , f2 ) → (f2 , f0 ) = (1, 0). Qualsiasi altra scelta di coppia di interi (a, b), con a ≥ b, per cui l’algoritmo di Euclide termina dopo n passi maggiora la coppia dei termini corrispondenti (fn+2 , fn+1 ) della successione di Fibonacci. Questo `e il contenuto del seguente Teorema di Lam´e: Teorema 2.5.2 (Lam´ e). Siano a e b due interi positivi con 0 < b < a e sia d = M CD(a, b). Se l’algoritmo di Euclide per calcolare il M CD(a, b) termina dopo n passi, allora a ≥ d · fn+2 e b ≥ d · fn+1 . Dimostrazione. La base dell’induzione `e vera perch´e se n = 1 allora l’algoritmo euclideo consiste nell’unico passo a = qb + 0, cio`e b | a, quindi

2.5 Algoritmi e complessit` a

97

M CD(a, b) = b = d = d · 1 = d · f2 . Inoltre si ha anche a = qb ≥ 2b = 2d = d · f3 . Supponiamo ora vero il risultato se abbiamo n − 1 passi. Per n passi vale a = b q1 + r1 ,

0 < r1 < b,

b = r1 q2 + r2 , r1 = r2 q3 + r3 , .. .

0 < r2 < r1 , 0 < r3 < r2 ,

ri = ri+1 qi+2 + ri+2 , .. .

0 < ri+2 < ri+1 ,

rn−3 = rn−2 qn−1 + rn−1 , rn−2 = rn−1 qn + 0.

0 < rn−1 < rn−2 ,

Applichiamo l’ipotesi induttiva alla coppia (b, r1 ) notando che M CD(b, r1 ) = d = M CD(a, b). Otteniamo b ≥ dfn+1 ,

r1 ≥ dfn ,

da cui a = r1 + bq1 ≥ r + b ≥ d(fn+1 + fn ) = dfn+2 ,

⊓ ⊔

che `e quanto si voleva dimostrare.

Il teorema appena enunciato ci permette di determinare un buon limite superiore per div(a, b). Proposizione 2.5.3. Siano a e b due interi positivi con 0 < b < a. Si ha div(a, b) ≤ 5L10 (b).

(2.10)

Dimostrazione. Dal Teorema 2.5.2 si deduce immediatamente che per ogni coppia di interi positivi a e b tali che a > b e b < fn+1 , il numero di divisioni necessarie per ottenere un resto nullo mediante l’algoritmo di Euclide `e < n. Sia √ allora n = div(a, b) e dunque b ≥ fn+1 . Si ricordi che se λ1 = (1 + 5)/2 allora fn+1 > λ1n−1 , per ogni n ≥ 3 (cfr. Esercizio A1.33). Quindi da b ≥ fn+1 segue b > λ1n−1 . Poich´e log10 λ1 > 1/5, si ha che log10 b > (n − 1) log10 λ1 >

n−1 5

e perci`o n − 1 < 5 log10 b.

Poich´e per la definizione di lunghezza (2.2) si ha b < 10L10 (b) , allora n − 1 < 5L10 (b), da cui segue la (2.10).

⊓ ⊔

98

2 Complessit` a computazionale

Con la limitazione del numero di divisioni data dalla (2.10), la situazione risulta nettamente migliorata rispetto alla situazione iniziale, che forniva una stima esponenziale per la complessit`a. Infatti ora si ha: Proposizione 2.5.4. Siano a e b due interi positivi con 0 < b < a. Si ha T (M CDE (a, b)) ∈ O(L(a)3 ). Dimostrazione. Si ha T (M CDE (a, b)) ∈ O(log b log2 a) = O(log3 a) = O(L(a)3 ). in quanto O(log b) stima la complessit` a relativa al numero di divisioni, mentre O(log2 a) stima la complessit`a di ogni divisione. ⊓ ⊔ Questo mostra che la complessit` a dell’algoritmo euclideo `e polinomiale. Facciamo ora un esempio. Esempio 2.5.5. Stimare il numero di divisioni per condurre a termine l’algoritmo euclideo per la ricerca del M CD tra i due numeri a = 34567 e b = 457. Il numero b ha 3 cifre, per cui L10 (b) = 3. Siamo dunque sicuri che con meno di 5 · 3 = 15 divisioni si riesce a portare a termine l’algoritmo euclideo. Vediamo quante divisioni sono di fatto necessarie: 34567 = 457 · 75 + 292, 457 = 292 · 1 + 165, 292 = 165 · 1 + 127, 165 = 127 · 1 + 38, 127 = 38 · 3 + 13, 38 = 13 · 2 + 12, 13 = 12 · 1 + 1, 12 = 1 · 12 + 0.

Sono state sufficienti, dunque, solo 8 divisioni, invece di 15, per verificare che M CD(34567, 457) = 1. Tenendo presente le considerazioni del § 1.3.3 e la stima (2.5.4) possiamo concludere (cfr. Esercizio A2.13) che: Corollario 2.5.6. Siano a e b due interi positivi con 0 < b < a. La complessit` a per il calcolo di una relazione di B´ezout del tipo (1.14) mediante l’algoritmo euclideo `e O(L(a)3 ). Analogamente, si ha (cfr. ancora l’Esercizio A2.13): Corollario 2.5.7. La complessit` a dell’algoritmo per la soluzione di un’equazione lineare diofantea del tipo ax + by = c mediante l’algoritmo indicato nel corso della dimostrazione della Proposizione 1.3.11 `e O(k 3 ) dove k `e la massima lunghezza degli interi a, b, c.

2.5 Algoritmi e complessit` a

99

2.5.2 Dalla scrittura binaria a quella decimale: complessit` a Ricordiamo che nel paragrafo 1.4 abbiamo spiegato come si trovano i coefficienti di un intero rispetto ad una base qualsiasi. In particolare se la nostra base `e 10 e d `e un intero positivo tale che d = (dk−1 . . . d0 )10 allora, se indichiamo con q il quoziente e con r il resto della divisione di d per 10, abbiamo che d0 `e il resto r e d1 `e il resto della divisione di q per 10, ecc. Poich´e 10 = (1010)2 , la divisione di d per 10, espressi in forma binaria, ha complessit` a O(4L2 (d)) = O(log d). In tal modo otteniamo il resto r = d0 in forma binaria e cio`e uno dei numeri da 0 a 9 in forma binaria. Ora ripetiamo il procedimento dividendo il quoziente q per 10. Questa operazione ha complessit` a di nuovo stimabile con O(log d). Cos`ı si determina d1 che `e il resto della divisione e il quoziente diventa il punto di partenza per calcolare d2 . Questo procedimento deve essere ripetuto tante volte quante `e la lunghezza di d in base 10, cio`e il numero di cifre decimali di d. Questo, per la (2.4), `e L10 (d) ∈ O(log d). In definitiva la complessit`a di questo algoritmo per il passaggio di d dalla forma binaria a quella decimale `e O(L(d)2 ) = O(log2 d). Ragionando esattamente nello stesso modo, si verifica (cfr. Esercizio A2.14): Proposizione 2.5.8. Siano α, β due interi maggiori di 1. Esiste un algoritmo per il passaggio della scrittura di un numero n in base α a quella dello stesso numero in base β la cui complessit` a `e O(log2 n). 2.5.3 Complessit` a delle operazioni tra polinomi ` dunque Sovente si ha a che fare con polinomi e con operazioni tra questi. E opportuno stimare la complessit` a delle operazioni tra polinomi a coefficienti interi. Vale la seguente: Proposizione 2.5.9. Siano f (x), g(x) due polinomi a coefficienti interi di gradi n e m, con n ≥ m, i cui coefficienti hanno lunghezza al pi` u k. Allora: (a) calcolare la somma o differenza di f (x) e g(x) ha complessit` a O(mk); (b) calcolare il prodotto di f (x) e g(x) ha complessit` a O(m(n+m)(k 2 +log m)). Dimostrazione. Per effettuare la somma [risp. la differenza] di f (x) e g(x) occorre fare m addizioni o sottrazioni. Di qui e dalla Proposizione 2.4.1 segue immediatamente la (a). Se f (x) = a0 + a1 x + a2 x2 + · · · + an xn ,

g(x) = b0 + b1 x + b2 x2 + · · · + bm xm ,

100

2 Complessit` a computazionale

 il prodotto f (x) · g(x) ha grado n + m e il coefficiente di xh `e i+j=h ai bj . Il calcolo di tale coefficiente richiede al pi` u m + 1 moltiplicazioni di numeri di lunghezza al pi` u k e al pi` u m addizioni di numeri di lunghezza al pi` u 2k. Poich´e dobbiamo effettuare m tali addizioni, la lunghezza degli addendi si potr` a limitare con 2k + L(m). Ne segue che la complessit`a richiesta `e O((n + ⊓ ⊔ m + 1)((m + 1)k 2 + m(2k + log m + 1)), da cui segue l’asserzione (b).

` opportuno anche precisare il numero di operazioni necessarie per effetE tuare operazioni tra polinomi su un campo K qualunque in cui abbia senso parlare di costo computazionale delle operazioni. Precisamente facciamo la seguente ipotesi : • il calcolo della somma o differenza di due elementi in K ha una certa complessit`a O(u); • il calcolo del prodotto di due elementi in K ha complessit` a O(t) con t ≥ u; • il calcolo dell’inverso di un elemento in K ha complessit` a O(s), con s ≥ t. Vedremo in seguito, come esempi di queste situazioni, i campi finiti (cfr. Capitolo 5). Si ha allora: Proposizione 2.5.10. Sia K un campo per il quale valgano le condizioni di cui sopra. Se f (x) = a0 + a1 x + · · · + an xn e g(x) = b0 + b1 x + · · · + bm xm sono polinomi su K, con n ≥ m, allora: • • • •

la complessit` a del calcolo di f (x) ± g(x) `e O(nu); la complessit` a del calcolo di f (x) · g(x) `e O(n2 t); la complessit` a del calcolo della divisione di f (x) per g(x) `e O(n2 s); la complessit` a del calcolo del massimo comun divisore di f (x) e g(x) `e O(n3 s); • la complessit` a del calcolo di una relazione di B´ezout per il suddetto massimo comun divisore `e O(n3 s). Dimostrazione. Il calcolo delle complessit`a di somma, differenza e prodotto di polinomi si calcola come nella Proposizione 2.5.9 e viene pertanto tralasciato. Soffermiamoci dunque sul calcolo delle rimanenti complessit` a. Dalla dimostrazione del Teorema 1.3.17 segue che, per effettuare la divisione di f (x) per g(x), occorre effettuare le seguenti operazioni: • calcolare l’inverso di bm ; • calcolare g(x)/bm , il che richiede m moltiplicazioni dei coefficienti di g(x) diversi da bm per 1/bm ; • moltiplicare g(x)/bm per il coefficiente direttore del polinomio dividendo, il che richiede m + 1 moltiplicazioni di elementi di K; questo procedimento va ripetuto n − m + 1 volte; • effettuare una differenza di polinomi di grado al pi` u n, il che richiede il calcolo di al pi` u n + 1 sottrazioni in K; anche questo procedimento va ripetuto n − m + 1 volte.

2.5 Algoritmi e complessit` a

101

In definitiva, la divisione in questione ha complessit` a O(s + mt + (n − m + 1)(m+1)t+(n−m+1)(n+1)u), che, ricordando le ipotesi fatte che s ≥ t ≥ u, si pu` o stimare con O(2(n + 1)2 s), da cui segue la tesi. Per calcolare il massimo comun divisore, va ripetuta la divisione al pi` um volte, e dunque la complessit` a si pu` o stimare con O(n3 s). Per calcolare un’identit` a di B´ezout, dopo aver effettuato l’algoritmo delle divisioni, si procede all’inverso come visto nel caso degli interi nel § 1.3.3. Questo richiede di fare al pi` u m moltiplicazioni e addizioni di polinomi di gradi al pi` u m. Di qui segue facilmente l’asserto. ⊓ ⊔ 2.5.4 Un algoritmo pi` u efficiente per la moltiplicazione Gli algoritmi che abbiamo presentato sono spesso migliorabili, ossia si possono rendere, con qualche piccolo accorgimento, pi` u efficienti. Descriviamo, a titolo di esempio, un algoritmo che permette di ridurre sostanzialmente il numero di operazioni bit per calcolare il prodotto di a e b dove a, b sono due interi positivi, di lunghezza un numero pari 2n, ossia a = (a2n−1 . . . a0 )2

e

b = (b2n−1 . . . b0 )2 .

Notiamo che questa, ovviamente, non `e affatto un’ipotesi restrittiva. Scriviamo a = A1 · 2n + A0 n

b = B1 · 2 + B0

con A1 = (a2n−1 . . . an )2 , A0 = (an−1 . . . a0 )2 , con B1 = (b2n−1 . . . bn )2 , B0 = (bn−1 . . . b0 )2 .

In questo modo a · b = (A1 · 2n + A0 )(B1 · 2n + B0 ) =

= A1 B1 · 22n + (A1 B0 + A0 B1 ) · 2n + A0 B0 .

(2.11)

Esempio 2.5.11. Se a = 23 + 2 + 1, allora a `e di 4-bits, da cui a = A1 · 22 + A0 , dove A1 = (1, 0) e A0 = (1, 1). Dunque il problema si riduce a svolgere le seguenti operazioni tra interi a n-bits A1 B1 ,

A1 B0 + A0 B1 ,

A0 B0 .

In realt` a dalla (2.11) si trae che a · b = A1 B1 (22n + 2n ) + (A1 − A0 )(B0 − B1 )2n + A0 B0 (2n + 1)

(2.12)

e quindi il problema si riduce a calcolare i tre prodotti tra interi a n-bits A1 B1 ,

(A1 − A0 )(B0 − B1 ),

A0 B0 ,

oltre ovviamente a effettuare un certo numero di addizioni e di traslazioni di cifre. Indichiamo con M (n) il numero di operazioni bit necessarie per calcolare il prodotto di due interi positivi a n-bits. Allora, per la (2.12), si ha M (2n) ≤ 3 · M (n) + C0 · n,

(2.13)

poich´e il numero di addizioni e traslazioni richieste per il calcolo di a · b tramite la (2.11) `e di classe O(n). Ora possiamo dimostrare il seguente:

102

2 Complessit` a computazionale

Lemma 2.5.12. Posto C = max(M (2), C0 ), si ha M(2k ) ≤ (3k − 2k ) · C. Dimostrazione. Dimostriamo la formula per induzione su k. Per definizione di C abbiamo che M (2) ≤ max(M (2), C0 ) = C = (31 − 21 ) · C

e quindi il teorema vale per k = 1. Supponiamo il lemma vero per k e proviamolo per k + 1. Si ha M (2k+1 ) = M (2 · 2k ) ≤ 3 · M (2k ) + C0 · 2k ≤ 3 · (3k − 2k )C · +C · 2k = = (3k+1 − 3 · 2k + 2k ) · C = (3k+1 − 2k+1 ) · C,

dove la prima disuguaglianza deriva dalla (2.13) e la seconda `e vera per l’ipotesi ⊔ ⊓ induttiva e perch´e C ≥ C0 . Dunque per n = 2k otteniamo che M (n) = M (2k ) ≤ M (2[log2 n]+1 ) ≤ (3[log2 n]+1 − 2[log2 n]+1 ) · C ≤

≤ 3[log2 n]+1 · C = 3C · 3[log2 n] ≤ 3C · 3log2 n = 3C · nlog2 3 ,

perch´e ovviamente vale l’uguaglianza 3log2 n = nlog2 3 . Possiamo dunque concludere: Proposizione 2.5.13. La complessit` a dell’algoritmo di sopra illustrato per il calcolo del prodotto di due interi a n-bits, con n = 2k , `e O(nlog2 3 ). Si noti che questa stima `e migliore della stima O(n2 ) ottenuta con il metodo standard descritta nella Proposizione 2.4.1, dato che log2 3 < 2.

2.5.5 Metodo di Ruffini–Horner Esaminiamo ora il problema di valutare un polinomio p(x) a coefficienti interi in x = α, con α ∈ Z, cio`e di calcolare p(α). Questo valore non `e altro che il resto della divisione di p(x) per x − α. Sia p(x) = a0 + a1 x + · · · + an−1 xn−1 + an xn ∈ Z[x], che scriveremo indifferentemente anche p(x) = an xn + an−1 xn−1 + · · · + a1 x + a0 . Il modo pi` u immediato per calcolare il valore del polinomio in α consiste nel sostituire nel polinomio al posto dell’indeterminata x l’elemento α e nello svolgere tutte le operazioni richieste nell’espressione del polinomio. Tuttavia questo metodo non `e efficiente. Infatti si devono effettuare i seguenti passi: • calcolare αi , qualunque sia i, 2 ≤ i ≤ n; • calcolare ai αi per 1 ≤ i ≤ n; • calcolare in successione le somme a0 + a1 α,

...,

(a0 + · · · + an−1 αn−1 ) + an αn .

2.5 Algoritmi e complessit` a

103

Dunque dobbiamo effettuare n − 1 moltiplicazioni al primo passo, n moltiplicazioni per il secondo e n addizioni per il terzo punto. Un metodo migliore `e quello di Ruffini-Horner. Esso si basa sulla possibilit` a di scrivere il polinomio in forma nidificata come segue: p(x) = a0 + (a1 + (a2 + · · · + (an−1 + an x)x) · · · )x. Tale scrittura `e basata sulla seguente formula ricorsiva:  an per k = 0, pk (x) = an−k + pk−1 x per 0 < k ≤ n. Si ha quindi p0 (x) = an , p1 (x) = an−1 + p0 x, p2 (x) = an−2 + p1 x, .. . pn (x) = p(x) = a0 + pn−1 x. Ad esempio, sia p(x) = 3x4 + 2x3 + x2 − x + 4. Allora p0 (x) = 3, p1 (x) = a3 + p0 x = 2 + 3x, p2 (x) = a2 + p1 x = 1 + (2 + 3x)x, p3 (x) = a1 + p2 x = −1 + (1 + (2 + 3x)x)x, p4 (x) = a0 + p3 x = 4 + (−1 + (1 + (2 + 3x)x)x)x, che rappresenta la forma nidificata del polinomio p(x). Vediamo in pratica come si procede con questo algoritmo. Si scrivono due righe: nella prima riga si mettono tutti i coefficienti di p(x), a partire dal coefficiente direttore, compresi i coefficienti nulli. Nel primo termine nella seconda riga, a cominciare da sinistra, si copia il coefficiente direttore di p(x). In seconda posizione si mette il termine precedente moltiplicato per α sommato al secondo termine della prima riga, cio`e p1 (α). In generale il termine di posto i della seconda riga uguaglia il termine precedente moltiplicato per α e sommato al corrispondente termine della prima riga, e questo `e esattamente pi−1 (α). L’ultimo termine che si ottiene `e pn (α), cio`e il valore cercato p(α). In sostanza, le due righe previste dall’algoritmo sono a2 a1 a0 an an−1 . . . . pn p1 (α) . . . pn−2 (α) pn−1 (α) pn (α)

(2.14)

Notiamo che da questa tabella si legge il quoziente di p(x) per x − α che risulta essere

104

2 Complessit` a computazionale

pn xn−1 + p1 (α)xn−2 + · · · + pn−2 (α)x + pn−1 (α)

(2.15)

(cfr. Esercizio A2.16). Questo metodo per ottenere il quoziente della divisione prende il nome di divisione sintetica. Si vede anche facilmente (cfr. ancora Esercizio A2.16) che il numero totale di moltiplicazioni necessarie per scrivere la seconda riga `e esattamente n. Facciamo un esempio. Esempio 2.5.14. Valutare con l’algoritmo appena visto il polinomio il x5 − 3x4 + x2 + x − 1 in x = −3. Le due righe previste dall’algoritmo sono 1 −3 0 1 1 −1 1 −6 18 −53 160 −481 e il valore cercato p(−3) `e −481, che `e il resto della divisione di x5 − 3x4 + x2 + x − 1 per x + 3. Si noti che dalla tabella precedente si legge anche il quoziente di questa divisione: x4 − 6x3 + 18x2 − 53x + 160. Per quanto riguarda la complessit` a dell’algoritmo, il numero di operazioni che si devono fare per valutare in α il polinomio scritto in forma nidificata `e inferiore al numero di operazioni che si farebbero lasciando l’espressione del polinomio nella forma standard. Infatti dobbiamo fare solo n moltiplicazioni e n addizioni. Per semplicit` a supponiamo α > 0; nel caso α fosse negativo le formule restano valide usando |α|, al posto di α. Notiamo che pk (α) = an−k + (an−k+1 + (· · · + (an−1 + an α)α)α . . .)α `e maggiorato, in valore assoluto, da d + (d + · · · + (d + (d + dα)α)α) · · · α

(2.16)

dove d = max{ |ai | }. Supponiamo d abbia lunghezza h e che α abbia lunghezza k. Si noti che la quantit` a in (2.16) non `e altro che il polinomio d(1+x+· · ·+xk ) valutato in α. Dunque, in definitiva, per ogni k = 0, . . . , n, si ha |pk (α)| ≤ (n + 1)dαn e pertanto L(pk (α)) `e O(n log nhk). Poich´e per passare da pk (α) a pk+1 (α) dobbiamo fare una moltiplicazione per α e una addizione, allora, la complessit` a per il calcolo di pk+1 (α) `e O(n log nh2 k). Inoltre k varia fra 0 e n, e pertanto la complessit`a richiesta `e O(n2 log nh2 k).

Appendice al Capitolo 2 A2 Esercizi di carattere teorico A2.1. Dimostrare che se f ∈ O(g) e g ∈ O(h), allora f ∈ O(h). A2.2. Supponiamo che limx→∞ (f (n)/g(n)) = ∞. Dimostrare che g ∈ O(f ).

A2 Esercizi di carattere teorico

105

A2.3. Supponiamo che limx→∞ (f (n)/g(n)) = a = 0. Dimostrare che allora f ∈ O(g) e g ∈ O(f ). A2.4. Supponiamo che limx→∞ (f (n)/g(n)) = 0. Dimostrare che f ∈ O(g).

A2.5. Dimostrare che, se f (n) = (n + 1) + n(−1)n e g(n) = (n + 1) − n(−1)n , allora non esiste nessuno dei due limiti seguenti: lim

n→∞

f (n) , g(n)

lim

n→∞

g(n) . f (n)

A2.6. Dimostrare che se f ∈ O(g) e c > 0, allora c · f ∈ O(g). A2.7. Dimostrare che se f1 ∈ O(g1 ) e f2 ∈ O(g2 ), allora f1 · f2 ∈ O(g1 · g2 ). A2.8. Supponiamo di moltiplicare n numeri di lunghezza al pi` u k. Qual `e un limite superiore per la lunghezza del risultato? (a) (b) (c) (d)

k3 . k2 . nk. Nessuna delle precedenti.

A2.9.* Stimare la lunghezza L(n!) di n! con una funzione di riferimento semplice, dove n `e un intero di lunghezza k. (a) (b) (c) (d)

L(n!) ∈ O(nk). L(n!) ∈ O(k2 ). L(n!) ∈ O(k3 ). Nessuna delle precedenti.

A2.10.* Stimare la lunghezza L n 2 2 (a) Lm  ∈ O(m2 k2 ). n (b) Lm ∈ O(n h ). n (c) L m ∈ O(hk). (d) Nessuna delle precedenti.

n m

, dove n ha lunghezza h e m ha lunghezza k.

A2.11. Dati n numeri di lunghezze k1 , . . . , kn rispettivamente, provare che la lunghezza della somma `e minore o uguale al massimo delle lunghezze pi` u L(n). Cosa succede per il prodotto? A2.12. Siano a e b interi di lunghezza rispettivamente k e l, con k ≥ l. Dimostrare che T (a − b) ∈ O(k) = O(max{L(a), L(b)}). A2.13. Provare i Corollari 2.5.6 e 2.5.7 a pagina 98. A2.14. Provare la Proposizione 2.5.8. A2.15. Stimare la complessit` a del calcolo, ovvero il numero di operazioni bit, dello sviluppo di un numero razionale in frazione continua. A2.16. Si verifichi che il polinomio in (2.15) `e il quoziente della divisione di p(x) per x − α e che il numero di moltiplicazioni necessarie per scrivere la seconda riga della tabella (2.14) `e esattamente n.

106

2 Complessit` a computazionale

A2.17. Ricordando gli Esercizi A1.36, A1.40 e B1.37, si provi che l’algoritmo per il calcolo del massimo comun divisore suggerito nell’Esercizio A1.40 `e pi` u rapido di quello basato sul solito algoritmo della divisione. Si provi che tuttavia la stima asintotica data nella Proposizione 2.5.4 non si pu` o migliorare in questo modo. A2.18.* Dimostrare che la complessit` a computazionale per il calcolo del prodotto righe per colonne di due matrici n × n a coefficienti interi limitati in valore assoluto da un numero intero positivo m `e O(n3 log2 m). A2.19. Dimostrare che la complessit` a computazionale per il calcolo del prodotto A · X, dove A `e una matrice quadrata di ordine n e X `e un vettore colonna con n componenti, a coefficienti interi limitati in valore assoluto da un numero intero positivo m, `e O(n2 log2 m). A2.20.* Dimostrare che il numero di operazioni necessarie per effettuare la riduzione in forma a scalini con l’algoritmo di Gauss (cfr. [13], Cap. 8) di una matrice di tipo m × n, con m ≤ n, su un campo `e O(n3 ). A2.21.* Dimostrare che il numero di operazioni necessarie per il calcolo del determinante di una matrice quadrata di ordine n su un campo `e O(n3 ). A2.22.* Dimostrare che il numero di operazioni necessarie per calcolare l’inversa di una matrice quadrata di ordine n su un campo `e O(n3 ). A2.23.* Stimare il numero di operazioni bit necessarie per calcolare n!, dove n `e un intero di lunghezza k. (a) (b) (c) (d)

T (n!) ∈ O(ek ). T (n!) ∈ O(n3 k3 ). T (n!) ∈ O(n2 k2 ). Nessuna delle precedenti.

A2.24.* Stimare la complessit` a per il calcolo di

n m

.

n

A2.25.* Stimare la complessit` a per il calcolo di m .

B2 Esercizi di carattere computazionale B2.1. Sia f (n) = n3 − 2n2 − 1. Determinare la migliore stima di f (n) con O fra le seguenti. (a) (b) (c) (d)

f (n) ∈ O(n4 ). f (n) ∈ O(n3 ). f (n) ∈ O(n2 ). f (n) ∈ O(n2 log n).

B2.2. Sia f (n) = 2 log n + n. Determinare la migliore stima di f (n) con O fra le seguenti. (a) (b) (c) (d)

f (n) ∈ O(log n). f (n) ∈ O(n2 ). f (n) ∈ O(n log n). f (n) ∈ O(n).

B2 Esercizi di carattere computazionale

107

B2.3. Sia f (n) la somma dei cubi dei primi n numeri pari (cfr. Esercizio B1.9). Determinare la migliore stima di f (n) con O fra le seguenti. (a) (b) (c) (d)

f (n) ∈ O(n4 ). f (n) ∈ O(n3 ). f (n) ∈ O(2n ). f (n) ∈ O(3n ).

B2.4. Sia f (n) = (a) (b) (c) (d)

4

n 4

f (n) ∈ O(n ). f (n) ∈ O(4n ). f (n) ∈ O(n3 ). f (n) ∈ O(3n ).

. Determinare la migliore stima di f (n) con O fra le seguenti.

B2.5. Determinare la migliore stima di f (n) = 3n + n! con O fra le seguenti. (a) (b) (c) (d)

f (n) ∈ O((3n)!). f (n) ∈ O(n!). f (n) ∈ O(3n ). f (n) ∈ O(n3 ).

B2.6. Sia f (n) = 3 log5 n + log n + 2. Determinare la migliore stima di f (n) con O fra le seguenti. (a) (b) (c) (d)

f (n) ∈ O(n). f (n) ∈ O(log n). f (n) ∈ O(n log n). f (n) ∈ O(log5 n).

B2.7. Qual `e la lunghezza di 2047 in base 2? (a) (b) (c) (d)

13. 12. 11. Nessuna delle precedenti.

B2.8. Qual `e la lunghezza di (110110110110)2 in base 10? (a) (b) (c) (d)

3. 4. 5. Nessuna delle precedenti.

B2.9. Qual `e la lunghezza di (110110110110)2 in base 16 (cfr. Osservazione 1.4.3)? (a) (b) (c) (d)

3. 4. 5. Nessuna delle precedenti.

B2.10. Qual `e la lunghezza di 32769 in base 8? (a) 4. (b) 5.

108

2 Complessit` a computazionale

(c) 6. (d) Nessuna delle precedenti. B2.11. Qual `e la lunghezza in base 10 del numero esadecimale (F 424B)16 ? (a) (b) (c) (d)

7. 6. 5. Nessuna delle precedenti.

B2.12. Qual `e la lunghezza di (7424B)16 in base 2? (a) (b) (c) (d)

21. 20. 19. Nessuna delle precedenti.

B2.13. Qual `e la lunghezza in base 2 della somma di (100100110)2 e (11100101)2 ? (a) (b) (c) (d)

9. 10. 11. Nessuna delle precedenti.

B2.14. Qual `e la lunghezza in base 2 del prodotto dei numeri binari 11101 e 1101? (a) (b) (c) (d)

8. 9. 10. Nessuna delle precedenti.

B2.15. Si supponga di avere un algoritmo che, a fronte di un input di lunghezza n, ha complessit` a log n (o, rispettivamente, n, n log n, n2 , 2n , n!). Si supponga che il tempo occorrente per eseguire ogni operazione bit sia di 10−9 secondi. Si verifichi allora la tabella 2.1 che fornisce il tempo richiesto per portare a termine l’algoritmo. Tabella 2.1. Tempo per compiere le operazioni bit indicate 2n

log n

n

10

3 · 10−9 s

10−8 s 3 · 10−8 s 10−7 s 10−6 s

2

10

3

10

4

10

5

10

6

10

−9

7 · 10

s

−8

1,0 · 10

−8

1,3 · 10

−8

1,7 · 10

−8

2 · 10

s

n log n

n2

n

−7

10

−6

s 10

−5

s 10

−4

s 10

−3

10

−7

s 7 · 10

−5

s 1 · 10

−5

s 10

−3

s 10

−4

s 10

−3

s 10 s

−2

s 17 m

s 1 · 10 s 2 · 10 s 2 · 10

−1

n! 13

s 4 · 10 ∗

s ∗

∗ ∗

3 · 10−3 s

a ∗ ∗ ∗ ∗ ∗

Nella tabella la prima colonna rappresenta la grandezza dell’input, mentre le successive colonne stanno ad indicare la complessit` a, e s, m ed a denotano rispet-

B2 Esercizi di carattere computazionale

109

tivamente secondi, minuti ed anni impiegati per eseguire l’algoritmo. L’asterisco indica che il tempo impiegato `e pi` u di 10100 anni. B2.16. Mettere in ordine dalla pi` u intrattabile alla pi` u trattabile le complessit` a esponenziale, fattoriale, lineare, logaritmica e polinomiale. (a) (b) (c) (d)

Fattoriale, esponenziale, Esponenziale, fattoriale, Esponenziale, fattoriale, Fattoriale, esponenziale,

logaritmica, polinomiale e lineare. polinomiale, logaritmica e lineare. logaritmica, polinomiale e lineare. polinomiale, lineare e logaritmica.

B2.17. Sia k un intero positivo e siano a, b interi di lunghezze rispettivamente [e2k ] e [ek ]. Qual `e la stima migliore del tempo di calcolo di a + b? (a) (b) (c) (d)

O(ek ). O(2ek ). O(e2k ). O(e3k ).

B2.18. Sia k un intero positivo e siano a, b interi di lunghezze rispettivamente k3 e [log2 k]. Qual `e la stima migliore del tempo di calcolo di a − b? (a) (b) (c) (d)

O(k). O(k3 ). O(log k). O(log2 k).

B2.19. Sia k un intero positivo e siano a e b interi di lunghezze rispettivamente [e2k ] e [ek ]. Qual `e la stima migliore del tempo di calcolo di a · b? (a) (b) (c) (d)

O(e2k ). O(e3k ). 2 O(e2k ). k O(ee ).

B2.20. Siano a e b interi di lunghezze rispettivamente k3 e [log2 k]. Qual `e la stima migliore del tempo di calcolo di a · b? (a) (b) (c) (d)

O(k2 log k). O(k3 log k). O(log3 k). O(k3 log2 k).

B2.21. Consideriamo la formula che d` a la somma dei primi n quadrati n 

j=1

j2 =

n(n + 1)(2n + 1) . 6

(2.17)

Qual `e una stima del numero di operazioni bit necessarie per calcolare il membro sinistro dell’uguaglianza (2.17)? (a) O(n log n). (b) O(n2 log n).

110

2 Complessit` a computazionale

(c) O(n log2 n). (d) Nessuna delle precedenti. B2.22. Consideriamo ancora la formula (2.17). Qual `e una stima del numero di operazioni bit necessarie per calcolare il membro destro di (2.17)? (a) (b) (c) (d)

O(n log n). O(n2 ). O(log2 n). Nessuna delle precedenti.

B2.23. Nei due esercizi precedenti abbiamo visto due modi per calcolare la formula (2.17). Qual `e il modo pi` u veloce? (a) (b) (c) (d)

Sono due modi ugualmente veloci. Il primo modo `e pi` u veloce. Il secondo modo `e pi` u veloce. Nessuna delle precedenti.

B2.24. Quanti passi sono necessari per calcolare il M CD(1176, 159) con la variazione dell’algoritmo euclideo di cui all’Esercizio A1.40? (a) (b) (c) (d)

4. 5. 6. Nessuna delle precedenti.

C2 Esercizi di programmazione C2.1. Si scriva un programma che calcoli la lunghezza di un numero intero a in base 2. C2.2. Si scriva un programma che calcoli la lunghezza di un intero a in base b, dove b `e un intero maggiore di 1. C2.3. Si scriva un programma che calcoli il prodotto di due numeri interi di lunghezza 2n con l’algoritmo descritto in §2.5.4. C2.4. Si scriva un programma che valuti un polinomio su di un intero con il metodo di Ruffini-Horner.

3 Dall’infinito al finito

In questo capitolo definiremo un’importante relazione in Z: la relazione di congruenza modulo un intero positivo n. Di essa daremo qui le prime propriet` a ma ne approfondiremo lo studio a varie riprese pi` u avanti.

3.1 Congruenze: prime propriet` a La relazione di congruenza modulo un intero positivo n identifica tra loro due interi se e solo se la loro differenza `e un multiplo di n e quindi si pu` o pensare come un’uguaglianza a meno di multipli di n. La cosa pu`o sembrare a prima vista bizzarra. Invece essa `e di uso comune nella vita di tutti i giorni. Si pensi alla lettura delle ore sul quadrante di un orologio: alle sei del pomeriggio, ossia 18 ore dopo la mezzanotte, noi leggiamo la cifra 6. Ai fini del computo delle ore della giornata, quindi, la cifra 18 uguaglia la cifra 6. Questo significa che stiamo lavorando modulo 12. Ora formalizzeremo quanto abbiamo appena descritto. Definizione 3.1.1. Sia n un intero positivo fissato. Si dice relazione di congruenza modulo n la relazione in Z definita nel modo seguente: a ≡ b (mod n) se e solo se esiste un intero h tale che a − b = nh, ossia a≡b

(mod n)

se e solo se

n | (a − b)

e si dice in tal caso che a `e congruo a b modulo n. Talvolta scriveremo a ≡n b invece di a ≡ b (mod n), e anche ≡ invece di a di equivoco. ≡n in caso non vi sia possibilit` ` facile verificare (cfr. Esercizio A3.1) che la congruenza modulo un E qualunque intero positivo n `e una relazione di equivalenza, ossia: • `e riflessiva, cio`e per ogni intero a ∈ Z, si ha a ≡n a; • `e simmetrica, cio`e per ogni coppia di interi (a, b) ∈ Z × Z, si ha a ≡n b se e solo se b ≡n a;

112

3 Dall’infinito al finito

• `e transitiva, cio`e per ogni terna di interi (a, b, c) ∈ Z × Z × Z, se a ≡n b e b ≡n c allora si ha a ≡n c. Notiamo che un intero `e congruo a ogni altro modulo 1, ossia la congruenza modulo 1 `e una relazione di equivalenza banale, ragion per cui nel seguito supporremo in generale n > 1. a di Dato un intero a, indicheremo con [a]n , o, se non vi `e possibilit` confusione, [a], oppure a ¯, la classe di congruenza di a modulo n, ossia [a]n = { b ∈ Z | b ≡n a } = { a + hn | h ∈ Z } = = {. . . , a − 2n, a − n, a, a + n, a + 2n, . . .}. Dato che possiamo sempre dividere un intero a per n (vedi Proposizione 1.3.1), se indichiamo con r il resto della divisione, otteniamo immediatamente che: Proposizione 3.1.2. Ogni intero a `e congruo modulo n ad un unico intero r tale che 0 ≤ r < n. In particolare osserviamo che per ogni intero a c’`e un unico elemento r di [a]n tale che 0 ≤ r < n, cio`e il resto della divisione di a per n. Tale elemento si denota con il simbolo: a mod n . Osservazione 3.1.3. Notiamo che, tenendo presente la Proposizione 2.4.1, si ha che la complessit`a del calcolo di a mod n `e O(log a · log n). Se si lavora modulo un fissato intero n, che dunque `e da considerarsi costante, la complessit` a `e O(log a). Le classi di equivalenza sono esattamente n, ossia le seguenti (cfr. Esercizio A3.4): ¯ 0 = { interi che divisi per n danno per resto 0} = = { kn | k ∈ Z } = { multipli di n }, ¯ 1 = { interi che divisi per n danno per resto 1 } = .. .

= { kn + 1 | k ∈ Z },

n − 1 = { interi che divisi per n danno per resto n − 1, } = = { kn + n − 1 | k ∈ Z }. Per tale motivo le classi di equivalenza modulo n si dicono anche classi dei resti modulo n. Per illustrare geometricamente la situazione, possiamo pensare gli interi disposti a distanze uguali su di una circonferenza di lunghezza n. In tal modo appare chiaro che tutti i multipli interi di n vengono a coincidere con 0, gli

3.1 Congruenze: prime propriet` a

113

interi che divisi per n danno per resto 1 vengono a coincidere con 1, quelli che divisi per n danno come resto 2 vengono a coincidere con 2, ecc. Denoteremo con Zn l’insieme quoziente di Z rispetto alla congruenza modulo n, cio`e Zn consiste delle n classi distinte di resti modulo n: def Zn = { ¯ 0, ¯ 1, ¯ 2, . . . , n − 2, n − 1 } = Z/ ≡n .

Pertanto, usando la relazione di congruenza modulo n, dall’insieme infinito Z siamo passati all’insieme finito Zn . Questo passaggio dall’infinito al finito `e spesso assai utile, specialmente quando si vogliano effettuare calcoli o verifiche al computer, il quale, come `e ben noto, lavora soltanto in termini finiti. Vedremo alcuni esempi di ci` o gi` a in questo capitolo e pi` u ancora nei prossimi. La relazione di congruenza gode di molte delle propriet` a dell’uguaglianza tra numeri interi. Il simbolo ≡ `e stato introdotto da Gauss, proprio per l’analogia con la relazione di uguaglianza. In particolare possiamo sommare, sottrarre e moltiplicare elementi congruenti mantenendo la congruenza: Proposizione 3.1.4. Sia n > 1 un intero fissato. Se a, b, c, d sono interi a: con a ≡n b e c ≡n d, allora valgono le seguenti propriet` a±c≡b±d

(mod n),

ac ≡ bd

(mod n).

Dimostrazione. La semplice dimostrazione `e lasciata per esercizio al Lettore (vedi Esercizio A3.5). ⊓ ⊔ La Proposizione 3.1.4 ci dice che la relazione di congruenza definita su Z `e compatibile con le operazioni di addizione e moltiplicazione definite su Z. In altre parole, le due operazioni su Zn date da def

a ¯ + ¯b = a + b,

def

a ¯ · ¯b = a · b

(3.1)

sono ben definite, cio`e non dipendono dai rappresentanti. Quindi, esattamente a che prende come Z, anche Zn `e un esempio di anello commutativo con unit` il nome di anello delle classi resto modulo n (cfr. Esercizio A3.6). Osservazione 3.1.5. Tenendo presente l’Osservazione 3.1.3 e la Proposizione 2.4.1, si ha che la complessit`a del calcolo della somma di due elementi in Zn `e O(log n). Infatti possiamo pensare tali elementi come numeri minori di n e dunque di lunghezza O(log n). La somma ha ancora lunghezza O(log n), ma poi occorre ridurre modulo n, il che richiede di fare al pi` u una sottrazione di n. Da qui segue subito quanto asserito. Similmente la complessit`a del calcolo del prodotto di due elementi in Zn `e O(log2 n). Infatti il prodotto di due elementi in Zn ha lunghezza al pi` u O(2 log n). Poi occorre ridurre modulo n, il che richiede di fare una divisione per n. Da qui segue subito quanto asserito.

114

3 Dall’infinito al finito

` qui opportuno ricordare alcune nozioni di algebra per porre Osservazione 3.1.6. E in una prospettiva pi` u generale l’operazione che ci ha fatto passare dall’anello Z all’anello Zn . Sia A un anello commutativo e ne sia I un ideale (cfr. § 1.3.5). In A si pu` o definire la relazione di congruenza modulo I, denotata con ≡I , nel modo seguente: dati a, b ∈ A si ha a ≡I b se e solo se a − b ∈ I. Si verifica che ≡I `e una relazione di equivalenza (cfr. Esercizio A3.7), il cui insieme quoziente si denota con il simbolo A/I. Se a ∈ A, la sua classe modulo I si denota coi soliti simboli [a]I , [a], a o anche a + I, essendo costituita da tutti gli elementi del tipo a + b, con b ∈ I. Si osservi che I non `e altro che la classe di equivalenza di 0 modulo I. Si noti che ≡(0) non `e altro che l’uguaglianza, e quindi A/I = A, mentre ogni coppia di elementi di a sono congrui modulo A, ossia A/A consiste di un solo elemento. Vale l’analogo della Proposizione 3.1.4, ossia se a, b, c, d sono elementi di A e a ≡I b e c ≡I d, allora si ha (cfr. Esercizio A3.8) a ± c ≡I b ± d,

ac ≡I bd.

(3.2)

def a ¯ · ¯b = a · b

(3.3)

Ci` o implica che le due operazioni su A/I date da def a ¯ + ¯b = a + b,

sono ben definite in A/I, cio`e non dipendono dai rappresentanti. Con tali operazioni A/I `e anello commutativo, che si dice il quoziente di A modulo I (cfr. Esercizio A3.9). In questo ordine di idee, vediamo che Zn non `e altro che il quoziente di Z modulo l’ideale (n). Poich´e Z `e un anello euclideo (cfr. § 1.3.5) e dunque ad ideali principali (cfr. Teorema 1.3.14), ogni ideale proprio di Z `e del tipo (n), con n intero positivo, e quindi, al variare di n nell’insieme degli interi positivi, Zn descrive l’insieme di tutti i quozienti di Z che sono anelli commutativi unitari.

Non bisogna per` o pensare che tutto quello che vale per l’uguaglianza valga automaticamente anche per la congruenza. Ad esempio, in Z vale la seguente legge di cancellazione ac = bc

implica che a = b

purch´e sia c = 0. Ossia Z `e un dominio di integrit` a. Questa legge di cancellazione non si trasporta in generale alle congruenze, come mostra il seguente esempio: ma 2 ≡6 4. (3.4) 2 · 3 = 6 ≡6 12 = 4 · 3, Vale tuttavia il seguente risultato: Proposizione 3.1.7. Sia n > 1 un intero. Se ac ≡n bc e se c `e relativamente primo con n, cio`e M CD(c, n) = 1, allora a ≡n b. Dimostrazione. Se ac ≡n bc, allora n | (a − b)c. Poich´e M CD(c, n) = 1, dal Corollario 1.3.9 segue che n | a − b, ossia a ≡ b (mod n). ⊓ ⊔ Si osservi che nell’esempio (3.4) dato prima non era verificata l’ipotesi richiesta, perch´e M CD(3, 6) = 3 = 1. In realt` a la Proposizione 3.1.7 `e una conseguenza del seguente risultato pi` u generale.

3.1 Congruenze: prime propriet` a

115

Proposizione 3.1.8. Sia n > 1 un intero. Se ac ≡ bc (mod n), allora a ≡ b (mod m), dove d = M CD(c, n) e n = md. Dimostrazione. Si noti che m = n/d ed f = c/d sono interi, per definizione di d. Per ipotesi si ha che (a−b)c = kn per un certo intero k, quindi, dividendo per d, si trova che (a − b)f = km.

Allora m divide il prodotto (a − b)f , e m `e relativamente primo con f , cio`e M CD(m, f ) = 1 (cfr. Corollario 1.3.6), quindi m deve dividere a − b, come gi` a dimostrato nella Proposizione 3.1.7, perci` o a ≡m b. ⊓ ⊔

La Proposizione 3.1.8 sostanzialmente dice che si pu` o sempre semplificare una congruenza cancellando un fattore comune, purch´e si cambi opportunamente il modulo. Ad esempio 21 = 3 · 7 ≡9 30 = 3 · 10 e 7 ≡ 10 (mod 9), tuttavia 7 ≡ 10 (mod 3). Osservazione 3.1.9. Quanto abbiamo appena visto ci dice per esempio che in Z5 vale la stessa legge di cancellazione che vale in Z, ossia Z5 `e, al pari di Z, un dominio di integrit` a, e dunque `e un campo (cfr. Esercizio A1.48). Infatti se 0 per la Proposizione 3.1.7, poich´e 0, allora a ¯=¯ a ¯ · ¯b = ¯ 0, con a ¯, ¯b ∈ Z5 e ¯b = ¯ M CD(b, 5) = 1. Si dice perci` o che Z5 `e un dominio di integrit` a . Ma gli stessi risultati non implicano nulla su Z4 . Anzi, in Z4 ci sono dei divisori dello zero, infatti ¯ 2·¯ 2=¯ 0, con ¯ 2 = ¯ 0. Osservazione 3.1.10. Torniamo all’Osservazione 3.1.6. Supponiamo che A sia un dominio di integrit` a. Tenendo conto che [0]I = I, `e facile verificare (cfr. Esercizio A3.12) che A/I `e anch’esso un dominio di integrit` a se e solo se I `e un ideale primo, ossia se e solo se: per ogni coppia (a, b) di elementi di A tali che ab ∈ I, si ha che o a ∈ I oppure b ∈ I. Ora, nel caso di Z, ci possiamo chiedere quando accada che un ideale del tipo (n), con n intero positivo maggiore di 1 `e primo, il che `e condizione necessaria e a e dunque un campo sufficiente affinch´e Zn risulti anch’esso un dominio di integrit` (cfr. Esercizio A1.48). Ci` o evidentemente accade se e solo se: per ogni coppia (a, b) di interi tali che n | ab, si ha che o n | a oppure n | b. In tal caso si dice che n `e un numero primo. A prima vista non `e affatto chiaro che questa definizione di numero primo sia equivalente a quella data nel § 1.3.1. Infatti ci` o merita ulteriori approfondimenti che verranno svolti nel Capitolo 4. Ad esempio 2, 3, 5, 7, ecc., sono numeri primi e quindi Z2 , Z3 , Z5 , Z7 , ecc., sono domini di integrit` a e dunque, essendo finiti, campi.

Notiamo che la Proposizione 3.1.8 collega fra loro due congruenze rispetto a moduli diversi. Raccogliamo di seguito altre propriet` a utili, che legano fra loro congruenze relative a moduli diversi, lasciando la facile dimostrazione al Lettore (cfr. Esercizio A3.13; si veda anche l’Esercizio A1.47). Proposizione 3.1.11. Sussistono le seguenti propriet` a: (1) se a ≡n b e d | n, allora a ≡d b; (2) se a ≡n b e a ≡m b, allora a ≡ b (mod mcm(n, m)).

116

3 Dall’infinito al finito

3.2 Prime applicazioni delle congruenze 3.2.1 La prova del nove Ricordiamo la cosiddetta prova del nove, con la quale il Lettore sar` a familiare fin dalla scuola elementare. Essa serve per controllare l’esattezza di operazioni tra interi. Supponiamo ad esempio di voler moltiplicare fra loro due interi, diciamo 123 e 456, e di avere trovato come risultato 56088. Vogliamo controllarne l’esattezza. Si procede nel modo seguente. Si scrive la somma delle cifre dei fattori, tralasciando i 9, che vengono sostituiti con lo zero, e si itera questa procedura fino ad arrivare ad un numero ad una sola cifra. Si moltiplicano i due numeri a una sola cifra cos`ı ottenuti e si riduce anche il risultato di questa operazione ad un numero x ad una sola cifra con lo stesso procedimento. Infine anche il risultato da controllare si riduce nello stesso modo ad un numero ad una sola cifra: esso deve coincidere con x perch´e l’operazione sia stata eseguita correttamente. In pratica, nel nostro caso, si ha 123 1+2+3=6

× 456

6=6

= 56088,

4 + 5 + 6 = 15

5 + 6 + 0 + 8 + 8 = 27,

1+5=6

2+7=9= 0 .

A questo punto si fa il prodotto 6 · 6 = 36, la cui somma delle cifre `e 3 + 6 = 9 = 0 che coincide con la somma delle cifre del risultato della moltiplicazione dei due numeri originari (ossia 0). Se anzich´e 0 avessimo trovato un altro numero, voleva dire che sicuramente avevamo commesso un errore nella moltiplicazione. Il fatto di aver superato il controllo positivamente non garantisce per` o che la moltiplicazione sia corretta. Cerchiamo ora di capire qual `e il significato di questa prova del nove, in particolare vediamo cosa ci sia di speciale in relazione al numero 9. Come sappiamo dal paragrafo 1.4, quando scriviamo 123 in base 10 intendiamo il numero 1 · 102 + 2 · 10 + 3 · 100 . Ora, qualunque sia n > 0, si ha che · · · 1, · · · 9 = 9 · 111 10n − 1 = 999 n

cio`e

n

10n ≡9 1.

Ma allora, utilizzando le propriet` a delle congruenze, ne segue che 123 = 1 · 102 + 2 · 10 + 3 ≡9 1 + 2 + 3, ossia il numero 123, come ogni numero scritto in base 10, `e congruo modulo 9 alla somma delle sue cifre. Dunque se z `e il numero intero positivo z = (an an−1 an−2 . . . a1 a0 )10 = an 10n + · · · + a1 · 10 + a0 ,

(3.5)

allora z ≡ an + an−1 + · · · + a0

(mod 9).

In ci` o risiede la magia del numero nove e la spiegazione della prova del nove. Infatti, se due numeri sono diversi modulo 9 `e chiaro che sono diversi, mentre se sono uguali modulo 9 non `e affatto detto che siano uguali. Ora, se effettuiamo una operazione e facciamo la prova del nove e questa riesce, sappiamo soltanto che il risultato giusto e

3.2 Prime applicazioni delle congruenze

117

quello da noi trovato sono congrui modulo nove. Non possiamo perci` o essere sicuri di aver fatto bene l’operazione. Se invece la prova del nove fallisce, possiamo esser certi di aver sbagliato l’operazione. In altri termini, la prova del nove `e una condizione necessaria, ma non sufficiente, per l’esattezza dei calcoli. Ad esempio, se, sbagliando i calcoli, come risultato del prodotto di 123 e 456 avessimo ottenuto 65817, non avremmo potuto accorgerci, facendo la prova del nove, degli errori commessi, perch´e il risultato ottenuto e quello esatto stanno nella stessa classe modulo 9, in quanto entrambi divisibili per 9.

3.2.2 Criteri di divisibilit` a Un’altra utile applicazione delle congruenze, consiste nel fornire alcuni criteri di divisibilit` a, senza la necessit` a di svolgere effettivamente la divisione. Continuiamo a scrivere i numeri interi in base 10, ossia nella forma (3.5). Abbiamo allora i seguenti criteri: •

criterio di divisibilit` a per 3 e per 9: un numero intero z = (an an−1 . . . a1 a0 )10 `e divisibile per 3 (rispettivamente per 9) se e solo se la somma delle cifre a0 + a1 + a2 + · · · + an `e divisibile per 3 (rispettivamente per 9);



criterio di divisibilit` a per 2 e per 5: un numero intero z = (an an−1 . . . a1 a0 )10 `e divisibile per 2 o per 5 se e solo se la sua ultima cifra di destra, a0 , `e divisibile per 2 o per 5;



criterio di divisibilit` a per 4 e per 25: un numero intero z = (an an−1 . . . a1 a0 )10 `e divisibile per 4 (rispettivamente per 25) se e solo se il numero (a1 a0 )10 formato dalle sue ultime due cifre `e divisibile per 4 (rispettivamente per 25);



criterio di divisibilit` a per 2k : un intero z = (an an−1 an−2 . . . a1 a0 )10 `e divisibile per 2k se e solamente se 2k divide il numero (ak−1 ak−2 . . . a1 a0 )10 costituito dalle ultime k cifre di z; quindi, in particolare, un intero `e divisibile per 8 se e solamente se (a2 a1 a0 )10 `e divisibile per 8;



criterio di divisibilit` a per 11: un intero z = (an an−1 an−2 . . . a1 a0 )10 `e divisibile per 11 se e solo se la somma a segni alterni delle sue cifre a0 − a1 + a2 − · · · + (−1)n an `e divisibile per 11.

Dimostrazione. Il criterio di divisibilit` a per 3 e per 9 segue dal fatto che z ≡ an + an−1 + · · · + a0 sia modulo 3 sia modulo 9. Osserviamo che 10n ≡ 0 sia modulo 2 che modulo 5, per ogni n ≥ 1. Quindi z ≡ a0 sia modulo 2 sia modulo 5, che dimostra i criteri di divisibilit` a corrispondenti. Similmente, 100 = 22 52 ≡ 0 sia modulo 4 sia modulo 25, quindi ogni intero `e congruo modulo 4 o modulo 25 all’intero costituito dalle sue ultime due cifre di destra. Pi` u in generale, 10n = 2n 5n ≡ 0 (mod 2k ) per ogni k ≥ n, che dimostra il criterio di divisibilit` a per 2k . Infine si osservi che 10 ≡ −1 (mod 11), quindi per ogni p ≥ 1, si ha che 102p ≡ 1 (mod 11) e 102p+1 ≡ −1 (mod 11), da cui segue il criterio di divisibilit` a per 11. ⊓ ⊔

118

3 Dall’infinito al finito

Le considerazioni di questo paragrafo si possono in parte estendere a numeri scritti in base qualunque (cfr. gli esercizi in appendice).

3.3 Congruenze lineari Come per le uguaglianze, anche per le congruenze si pu` o porre il problema di risolvere una congruenza rispetto ad una o pi` u incognite. L’equazione pi` u semplice `e x ≡ a (mod n) che ha come soluzioni tutti gli interi della forma a + hn con h ∈ Z. Generalizzando, diamo la seguente definizione:

Definizione 3.3.1. Si dice congruenza lineare oppure equazione congruenziale lineare nella incognita x un’equazione della forma ax ≡ b

(mod n)

con a, b in Z e n intero positivo maggiore di 1. Ci poniamo il problema di vedere se e quando una congruenza di questo tipo ammette soluzioni, dove per soluzione si intende un intero x0 tale che ax0 ≡n b. Se esiste una soluzione, diremo che l’equazione `e risolubile o compatibile. Dai seguenti esempi si vede come si possono presentare sia casi di congruenze lineari risolubili, sia casi di congruenze lineari irresolubili. Esempio 3.3.2. L’equazione 3x ≡ 2 (mod 6) non ammette soluzioni, perch´e altrimenti dovrebbe essere risolubile in Z l’equazione 3x + 6y = 2, mentre sappiamo dalla Proposizione 1.3.11 che questa equazione non ammette soluzioni intere perch´e M CD(3, 6) = 3 che non divide 2. Esempio 3.3.3. L’equazione 4x ≡ 6 (mod 10) ammette la soluzione x = 4, che non `e unica, perch´e anche x = 9 `e soluzione. Daremo ora delle risposte generali riguardanti la risoluzione di una congruenza lineare: la sua compatibilit` a e, per congruenze che siano compatibili, la determinazione delle soluzioni. Proposizione 3.3.4. Sia data la congruenza ax ≡ b (mod n). (1) Essa ammette soluzioni se e solo se d = M CD(a, n) divide b. (2) Se la congruenza `e compatibile, indicata con x0 una sua soluzione, tutte e sole le soluzioni sono della forma: x0 + hm, con h ∈ Z, dove m = n/d. Tra queste, le soluzioni x0 ,

x0 + m,

x0 + 2m,

...,

x0 + (d − 1)m

(3.6)

sono tutte non congruenti tra di loro e ogni altra `e congruente ad una di queste. Quindi la congruenza ammette esattamente d soluzioni non congruenti modulo n.

3.3 Congruenze lineari

119

Dimostrazione. Risolvere la congruenza equivale a trovare soluzioni intere dell’equazione ax + ny = b, che per la Proposizione 1.3.11 esistono se e solo se M CD(a, n) | b. Proviamo ora che x0 + hm `e una soluzione, per ogni h ∈ Z. Infatti a(x0 + hm) = ax0 + ah

n a = ax0 + hn ≡n ax0 ≡n b. d d

Dimostriamo poi che ogni soluzione `e di questo tipo. Siano x0 e x′0 due soluzioni. Allora ax′0 = b + kn, ax0 = b + hn, per certi interi h e k, da cui segue che a(x0 − x′0 ) = (h − k)n. Dividendo ambo i membri per d si ottiene a′ (x0 − x′0 ) = (h − k)m, dove a′ = a/d. Essendo a′ ed m primi tra loro (cfr. Corollario 1.3.6) applicando la Proposizione 1.3.9 si vede che m divide x0 − x′0 , cio`e x0 − x′0 = zm per un certo intero z. Proviamo ora che, tra le soluzioni x0 + hm, al variare di h in Z, ce ne sono esattamente d non congruenti modulo n. A questo scopo, faremo vedere che le soluzioni (3.6) sono incongrue modulo n e che ogni altra soluzione `e congruente ad una di queste. Supponiamo per assurdo che due delle soluzioni (3.6) siano congruenti modulo n, cio`e x0 + h1 m ≡ x0 + h2 m

(mod n),

per certi h1 , h2 ∈ Z con 0 ≤ h1 < h2 ≤ d − 1. Allora si avrebbe h1 m ≡ h2 m

(mod n),

da cui, dividendo per m = M CD(m, n), ne seguirebbe che h1 ≡ h2

(mod d),

che `e assurdo perch´e avevamo supposto 0 < h2 − h1 < d. Per dimostrare che ogni soluzione del tipo x0 + hm, al variare di h in Z `e congruente ad una delle (3.6), basta dividere h per d, cio`e, posto h = dq + r, con 0 ≤ r ≤ d − 1, si ha che x0 + hm = x0 + (dq + r)m = x0 + qn + rm ≡n x0 + rm, che `e proprio una delle soluzioni (3.6).

⊓ ⊔

Esempio 3.3.5. La congruenza 4x ≡ 6 (mod 10) dell’Esempio 3.3.3 ammette dunque esattamente 2 = M CD(4, 10) soluzioni incongrue modulo 10, cio`e x = 4 e x = 9.

120

3 Dall’infinito al finito

Corollario 3.3.6. Se a `e relativamente primo con n, allora la congruenza ax ≡ b (mod n) ammette un’unica soluzione modulo n. I precedenti risultati consentono in particolare di determinare gli elementi invertibili di Zn , cio`e gli elementi x ¯ ∈ Zn per i quali esista un elemento y¯ ∈ Zn tale che x ¯y¯ = 1. Corollario 3.3.7. Un elemento a ¯ ∈ Zn `e invertibile se e solo se a `e relativamente primo con n. Dimostrazione. Determinare le classi a ¯ invertibili in Zn equivale a risolvere la congruenza ax ≡ 1 (mod n). Ora, tale congruenza ammette soluzione, e tale soluzione `e unica, se e solo se M CD(a, n) = 1. Le classi invertibili sono pertanto le classi a ¯ con 0 < a < n e M CD(a, n) = 1. ⊓ ⊔ Osservazione 3.3.8. Per risolvere una congruenza lineare del tipo ax ≡ b (mod n) occorre, in sostanza, risolvere un’equazione diofantea lineare del tipo ax+ny = b. Vediamo che complessit`a ha questa operazione. Possiamo supporre n dato e dunque costante. Come primo passo va calcolato d = M CD(a, n), il che ha complessit`a O(log3 a) per la Proposizione 2.5.4. Successivamente occorre dividere b per M CD(a, n), il che ha complessit` a O(log a log b) per la Proposizione 2.4.1. A questo punto possiamo decidere se l’equazione `e o meno risolubile, vedendo se b `e o meno divisibile per d. Dunque la complessit` a dell’algoritmo che decide se l’equazione `e risolubile ha complessit` a O(log3 a + log a log b). Quanto a risolvere effettivamente l’equazione, ricordiamo che per quanto visto nel § 1.3.4, onde ottenere una soluzione di ax+ny = b, a di e dunque una soluzione x0 di ax ≡ b (mod n), occorre calcolare un’identit` B´ezout per M CD(a, n) e moltiplicarla per b/d. Per il Corollario 2.5.6 e per la Proposizione 2.4.1 ci` o non aumenta ulteriormente la complessit` a. Cos`ı pure, per analoghi motivi, non aumenta la complessit` a la determinazione delle rimanenti soluzioni (3.6) della congruenza ottenute a norma della Proposizione 3.3.4. In particolare, per decidere se a ¯ ∈ Zn `e invertibile e determinarne un inverso in caso affermativo, la complessit` a `e semplicemente O(log3 a). Se invece, in quest’ultima questione, consideriamo a < n fissato, e dunque a costante e n variabile, vediamo che per decidere se a ¯ ∈ Zn `e invertibile e determinarne un inverso in caso affermativo, la complessit` a `e O(log3 n). Diamo una definizione: Definizione 3.3.9. Per ogni n ≥ 1, si indica con ϕ(n) il numero di interi positivi minori di n e primi con n. La funzione ϕ : N → N cos`ı definita prende il nome di funzione di Eulero o anche funzione ϕ.

3.3 Congruenze lineari

121

Ad esempio, ϕ(24) = 8 perch´e i numeri minori di 24 e relativamente primi con 24 sono: 1, 5, 7, 11, 13, 17, 19 e 23. La funzione di Eulero sar` a, come vedremo, molto importante nel seguito, e dunque torneremo sul suo studio, in particolare nel Capitolo 4. Per ora osserviamo che, visto che Zn = {[0], [1], . . . , [n − 1]}, il gruppo moltiplicativo U (Zn ) degli elementi invertibili di Zn `e costituito da tutte le classi [a], con 0 < a < n tali che a sia primo con n. Pertanto U (Zn ) ha esattamente ordine ϕ(n). Esempio 3.3.10. Diamo alcuni esempi di U (Zn ) per qualche n: ¯ 1, ¯ 2, ¯ ¯ Z4 = {0, 3}, 5}, 4, ¯ 3, ¯ 2, ¯ 1, ¯ Z6 = {¯ 0, ¯ ¯ ¯ ¯ Z8 = {0, 1, · · · , 7},

¯ 3}, ¯ U (Z4 ) = {1, U (Z6 ) = {¯1, ¯5}, U (Z8 ) = {¯1, ¯3, ¯5, ¯7}.

Si noti che ϕ(4) = |U (Z4 )| = 2, ϕ(6) = |U (Z6 )| = 2 e ϕ(8) = |U (Z8 )| = 4. Concludiamo questo paragrafo con un importante teorema, di cui tuttavia per ora, e cio`e finch´e non saremo in grado di calcolare la funzione di Eulero (cfr. Proposizione 4.2.3), non possiamo apprezzare tutta la portata. Si tratta del seguente: Teorema 3.3.11 (Teorema di Eulero). Se a `e relativamente primo con n, allora aϕ(n) ≡ 1 (mod n). Dimostrazione. Si ha [a] ∈ U (Zn ), e U (Zn ) `e un gruppo di ordine ϕ(n). Dunque l’asserto segue da propriet` a generali dei gruppi (cfr. Esercizio A3.37) richiamate, per convenienza del Lettore, nell’Osservazione 3.3.12 qui di seguito. ⊓ ⊔ ` opportuno ricordare qui le propriet` Osservazione 3.3.12. E a dei gruppi di cui si fa uso nella dimostrazione del Teorema di Eulero. Sia G un gruppo e ne sia x un elemento. Gli elementi di G del tipo xm , con m intero, cio`e le potenze di x, formano un sottogruppo di G, denotato con x, detto sottogruppo di G generato da x. Se esiste un x in G tale che G = x, il gruppo G si dice ciclico. Propriet` a generali dei gruppi ciclici usate anche in seguito sono richiamate negli Esercizi A3.23-A3.35. Sia G un gruppo e ne sia x un elemento. Si dice che x ha ordine finito se x `e finito, il che evidentemente accade se e solo se esiste un intero positivo n tale che xn = 1. Il minimo intero positivo n tale che xn = 1 si dice ordine di x o periodo di x e si denota con ord(x). In caso x non abbia ordine finito, allora si dice che ha ordine infinito. In sostanza ord(x) `e l’ordine del sottogruppo ciclico x (cfr. Esercizio A3.28). Se x ha ordine finito, allora xm = 1 per un intero m se e solo ord(x) | m e dunque xi = xj se e solo se i ≡ j (mod ord(x)) (cfr. Esercizio A3.27). Sia ora G un gruppo finito e sia H un suo sottogruppo. Ricordiamo che il Teorema di Lagrange asserisce che l’ordine di H divide quello di G (cfr. Esercizio A3.36). In

122

3 Dall’infinito al finito

particolare, se G `e finito, l’ordine di un suo qualunque elemento divide quello del gruppo. Quindi se G ha ordine n e x ∈ G si ha sempre xn = 1. La dimostrazione originale di Eulero `e basata sul Teorema Fondamentale dell’Aritmetica e viene presentata negli esercizi.

3.3.1 Potenze modulo n Dato un intero a e due interi positivi m e n, ci proponiamo di calcolare am

(mod n).

Si tratta di un tipo di calcolo che ci occorrer` a di utilizzare spesso nel seguito. Partiamo da un esempio: Esempio 3.3.13. Calcoliamo

1731 mod 58.

Possiamo procedere, dividendo via via l’esponente per 2, cos`ı:  2  2 2 2 2 2 (173 ) · 17 · 17 · 17 = 1731 = (1715 ) · 17 = (177 ) · 17 · 17 = =



2 2 (17 · 17) · 17 · 17 · 17. 2

(3.7)

2

Ogni volta, nel fare le singole operazioni, riduciamo modulo n = 58. Il Lettore verificher` a facilmente (cfr. Esercizio B3.36) che 1731 ≡ 41

(mod 58).

Delineiamo i vari passaggi e da tale descrizione dedurremo poi un algoritmo. Il numero 31 in base 2 si scrive come 31 = (11111)2 .

(3.8)

Si tratta di un numero a 5 cifre. Scriviamo allora le quattro (= 5 − 1) lettere E EEEE e partendo da sinistra inseriamo tra di loro una M per ogni cifra 1 che incontriamo in (3.8) e per ogni 0 che incontriamo avanziamo semplicemente di un posto. Il risultato finale sar` a M EM EM EM EM. (3.9) Diamo ora il seguente significato alle lettere M e E. M indichi la moltiplicazione per 17 (e sua riduzione modulo 58), E l’elevamento al quadrato (e riduzione modulo 58). Applichiamo allora l’operazione (3.9) al numero 1 (partendo da sinistra), cio`e valutiamo (1)M EM EM EM EM. Il risultato `e esattamente l’ultimo membro delle uguaglianze (3.7).

3.3 Congruenze lineari

123

Spieghiamo ora l’algoritmo in generale e calcoliamone la complessit` a. Partiamo dal problema di ridurre modulo n una potenza am , nel caso in cui sia l’esponente m sia il modulo n siano molto grandi. L’algoritmo, come si `e visto nell’esempio, permetter` a di evitare di fare m moltiplicazioni di a per se stesso. Possiamo senz’altro supporre che sia a < n e che ogni volta che facciamo una moltiplicazione, contestualmente riduciamo modulo n il prodotto ottenuto. Gli interi che incontreremo non saranno quindi mai maggiori di n2 . Scriviamo l’esponente m in base 2 m = n0 + n1 · 2 + n2 · 22 + · · · + nk−1 · 2k−1 , con nj ∈ {0, 1}, per cui am = an0 +n1 ·2+n2 ·2

2

+···+nk−1 ·2k−1

 j nj  k−1 nk−1 . = an0 (a2 )n1 · · · a2 · · · a2

All’inizio del procedimento poniamo p0 = 1. Effettueremo k − 1 passi definendo di volta in volta p1 , p2 , . . . , pk−1 , pk e alla fine troveremo pk = am mod n. Se n0 = 1, allora poniamo p1 = a, cio`e poniamo p1 = a · p0 mod n, altrimenti lasciamo p1 = 1. Successivamente eleviamo a al quadrato e poniamo a1 = a2 mod n. Se n1 = 1, poniamo p2 = a1 · p1 mod n, altrimenti lasciamo p2 = p1 . Eleviamo ora a1 al quadrato e poniamo a2 = a21 mod n. Se n2 = 1, poniamo p3 = a2 · p2 mod n, altrimenti lasciamo p3 = p2 . Continuando in questo modo, al passo j-esimo calcoliamo j

aj = a2 mod n. Se nj = 1, ossia se 2j compare nell’espansione binaria di m, pj+1 = aj · pj mod n, altrimenti lasciamo pj+1 = pj . Dopo k − 1 passi si ottiene cos`ı pk = am mod n. Calcoliamo la complessit` a di questo algoritmo detto dei quadrati successivi: ad ogni passo potremo avere una o due moltiplicazioni di numeri minori di n2 , per cui ogni passo comporta O(log2 (n2 )) = O(log2 n) operazioni bit. I passi sono k − 1, per cui la stima del tempo per calcolare am mod n `e O((log m)(log2 n)). Facciamo un altro esempio. Esempio 3.3.14. Calcolare 313 mod 7 con il metodo visto. Si ha che 13 = 1 + 22 + 23 , quindi n0 = 1, n1 = 0, n2 = n3 = 1, k − 1 = 3 e a = 3. (1) Poniamo p0 = 1. (2) Essendo n0 = 1, poniamo p1 = a = 3. (3) Eleviamo a = 3 al quadrato e lo riduciamo modulo 7, ottenendo a1 = 2. Essendo n1 = 0 poniamo p2 = p1 = 3. (4) Eleviamo a1 al quadrato e lo riduciamo modulo 7, ottenendo a2 = 4. Essendo n2 = 1 poniamo p3 = a2 p2 = 12 ≡ 5 mod 7. (5) Eleviamo a2 al quadrato e lo riduciamo modulo 7, ottenendo a3 = 2. Essendo n3 = 1 poniamo p4 = a3 p3 = 10 ≡ 3 mod 7.

124

3 Dall’infinito al finito

Il risultato `e proprio p4 , cio`e 3. Il Lettore potr` a verificare che il risultato `e giusto usando il Teorema di Eulero (cfr. Esercizio B3.37). Osservazione 3.3.15. Come accennato nell’Esempio 3.3.13, un altro modo di effettuare l’algoritmo ora presentato `e il seguente: • •

si scrive l’esponente m in base 2 come sequenza di 0 e di 1; si scrive una sequenza di L2 (m) − 1 lettere E E  E EE · · · E; L2 (m)−1





partendo da sinistra, si inserisce tra di loro una M per ogni cifra 1 che si incontra nella scrittura binaria di m e per ogni 0 che si incontra si avanza semplicemente di un posto; il significato delle lettere `e il seguente: E indica l’elevamento al quadrato e sua riduzione modulo m, M indica la moltiplicazione per a e riduzione modulo m; il risultato cercato si ottiene applicando la sequenza di M e E cos`ı ottenuta all’elemento 1 partendo da sinistra.

Illustriamo quanto detto anche con l’esempio del calcolo di 313 (mod 7). Si ha m = 13 e 13 = (1101)2 . Dato che L2 (13) = 4, scriveremo 3 lettere E EEE Inserendo ora tante lettere M a partire da sinistra, quanti sono gli 1 della scrittura di m e per ogni 0 avanzando semplicemente di un posto, otteniamo M EM EEM. Calcoliamo ora (1)M EM EEM, essendo M la moltiplicazione per 3, E l’elevamento al quadrato: ritroviamo ((32 · 3)2 )2 · 3 ≡ 3

(mod 7).

Si noti che si ritrovano qui gli operatori introdotti nel precedente esempio esplicativo: le operazioni che si fanno sono: (M ) di moltiplicare per a ed (E) di elevare al quadrato. o capitare che a ed n siano primi Osservazione 3.3.16. Nel calcolo di am mod n pu` tra loro. In questo caso, per semplificare i calcoli, si potrebbe utilizzare il Teorema di Eulero 3.3.11, il che per` o comporta la conoscenza del valore della funzione di Eulero ϕ(n). Se conosciamo ϕ(n) e se M CD(a, n) = 1, allora si pu` o verificare che la complessit` a del calcolo di am mod n diventa O(log3 n) (cfr. Esercizio A3.38).

3.4 Il Teorema cinese dei resti

125

3.4 Il Teorema cinese dei resti Supponiamo di dovere rapidamente contare un gruppo di studenti di una scuola, ma di non avere tempo di chiamarli uno per uno; unica informazione: sono meno di 1000. Come possiamo procedere? La soluzione di questo problema `e antica ed `e contenuta nel cosiddetto Teorema cinese dei resti che appare nella letteratura cinese del primo secolo d.C. Tale teorema ci permette di risolvere un sistema di congruenze lineari a cui possiamo, come vedremo, ricondurre il problema iniziale. Consideriamo dunque il seguente sistema: ⎧ a1 x ≡ b1 (mod n1 ), ⎪ ⎪ ⎪ ⎪ ⎨a2 x ≡ b2 (mod n2 ), (3.10) ⎪... ⎪ ⎪ ⎪ ⎩ as x ≡ bs (mod ns ). Risolvere tale sistema significa trovare ⎧ ⎪ ⎪a1 x0 ≡ b1 ⎪ ⎪ ⎨a2 x0 ≡ b2 .. ⎪ ⎪ . ⎪ ⎪ ⎩ as x0 ≡ bs

un intero x0 tale che (mod n1 ), (mod n2 ),

(3.11)

(mod ns ).

Un tale intero x0 si dice una soluzione del sistema 3.10 e, se una soluzione esiste, il sistema si dice risolubile o compatibile. Quindi, se anche una sola delle congruenze non `e risolubile, allora il sistema non potr` a ammettere soluzioni. Il problema in questione riesce di facile risoluzione nel caso in cui M CD(ni , nj ) = 1 per ogni coppia (i, j) con i = j. Lemma 3.4.1. Si consideri un sistema del tipo (3.10) di congruenze tutte compatibili e tali che M CD(ni , nj ) = 1 per ogni coppia (i, j) con i = j. Allora risolvere (3.10) equivale a risolvere un sistema del tipo ⎧ x ≡ c1 (mod r1 ), ⎪ ⎪ ⎪ ⎪ ⎨x ≡ c2 (mod r2 ), (3.12) .. ⎪ ⎪ . ⎪ ⎪ ⎩ x ≡ cs (mod rs )

con M CD(ri , rj ) = 1 per ogni coppia (i, j) con i = j.

Dimostrazione. Perch´e il sistema (3.10) ammetta soluzioni `e necessario che dk = M CD(ak , nk ) divida bk , per ogni k = 1, . . . , s. Una volta che siano soddisfatte queste condizioni, si pu` o dividere la k-esima congruenza per dk , ottenendo

126

3 Dall’infinito al finito

⎧ a′1 x ≡ b′1 ⎪ ⎪ ⎪ ⎪ ⎨a′2 x ≡ b′2 .. ⎪ ⎪ . ⎪ ⎪ ⎩ ′ as x ≡ b′s

(mod r1 ), (mod r2 ),

(3.13)

(mod rs ),

dove a′k = ak /dk , b′k = bk /dk e rk = nk /dk e vale ancora la condizione M CD(ri , rj ) = 1 per ogni coppia (i, j) tale che i = j. Notiamo che il nuovo sistema (3.13) `e equivalente al precedente, nel senso che ne ammette le stesse soluzioni. Ora, si noti che si ha M CD(a′k , rk ) = 1, per ogni k = 1, . . . , s, quindi, in base al corollario 3.3.6, ciascuna delle congruenze del sistema ammette un’unica soluzione ck modulo rk . Possiamo allora sostituire nuovamente il sistema (3.13) con il sistema (3.12). ⊓ ⊔ Passiamo quindi a studiare sistemi di congruenze del tipo (3.12). Teorema 3.4.2 (Teorema cinese dei resti). Un sistema di congruenze (3.12), con M CD(ri , rj ) = 1 per ogni coppia (i, j) con i = j, ammette una soluzione. Tale soluzione `e unica modulo R = r1 r2 · · · rs . Dimostrazione. Poniamo Rk = R/rk . Poich´e M CD(ri , rj ) = 1 per ogni coppia (i, j) con i = j, si ha, per reiterate applicazioni del Corollario 1.3.7, che M CD(Rk , rk ) = 1 per ogni k = 1, . . . , s. Quindi la congruenza Rk x ≡ ck

(mod rk )

ammette un’unica soluzione modulo rk , che chiamiamo x ¯k . Allora il numero x ¯ = R1 x ¯ 1 + R2 x ¯ 2 + · · · + Rs x ¯s `e una soluzione del sistema (3.12). Infatti, essendo Ri multiplo di rk per i = k, si ha che Ri ≡ 0 (mod rk ) per i = k, e dunque

⎧ x ¯ ≡ R1 x ¯1 ≡ c1 (mod r1 ), ⎪ ⎪ ⎪ ⎪ ⎨x ¯ ≡ R2 x ¯2 ≡ c2 (mod r2 ), . .. ⎪ ⎪ ⎪ ⎪ ⎩ ¯s ≡ cs (mod rs ). x ¯ ≡ Rs x

Per quanto riguarda l’unicit` a modulo R, sia y¯ un’altra soluzione del sistema, cio`e sia x ¯ ≡ ck ≡ y¯ (mod rk ),

per k = 1, . . . , s.

Allora x ¯ − y¯ ≡ 0 (mod rk ), per k = 1, . . . , s, da cui x ¯ − y¯ ≡R 0 (cfr. Corollario 1.3.8). ⊓ ⊔

3.4 Il Teorema cinese dei resti

Osservazione 3.4.3. Analogamente sistema del tipo ⎧ a1 x ≡ b1 ⎪ ⎪ ⎪ ⎪ ⎨a2 x ≡ b2 .. ⎪ ⎪ . ⎪ ⎪ ⎩ as x ≡ bs

127

si vede che, se si vuole risolvere un (mod r1 ), (mod r2 ), (mod rs ).

con M CD(ai , ri ) = 1 per ogni i = 1, . . . , s e M CD(ri , rj ) = 1 per ogni coppia (i, j) tale che i = j, allora la soluzione sar`a x ¯ = R1 x ¯ 1 + R2 x ¯ 2 + · · · + Rs x ¯s dove x ¯k `e tale che ak Rk x ¯k ≡ bk (mod rk ), per ogni k = 1, . . . , s.

Esempio 3.4.4. Riprendiamo l’esempio dei ragazzi nella scuola da cui siamo partiti. Per contarli basta che si chieda loro di mettersi in fila per 5, per 8 e per 19, e ogni volta che si sono allineati, si contano i ragazzi che restano fuori: tali resti ci , per i = 1, 2 e 3, saranno rispettivamente minori di 5, di 8 e di 19. Dopo di che si risolve il sistema ⎧ ⎪ ⎨x ≡ c1 (mod 5), x ≡ c2 (mod 8), ⎪ ⎩ x ≡ c3 (mod 19),

che, in virt` u del Teorema cinese dei resti, ammette un’unica soluzione modulo R = 5 · 8 · 19 = 760. Tale soluzione `e il numero totale dei ragazzi. Supponiamo ad esempio che quando si allineano per 5 ne resti fuori 1, quando si allineano per 8 ne restino fuori 2, e quando si allineano per 19 ne a in restino fuori 3. Allora c1 = 1, c2 = 2 e c3 = 3. Il numero dei ragazzi sar` questo caso dato dalla soluzione, che `e unica modulo 1001, del sistema ⎧ ⎪ ⎨x ≡ 1 (mod 5), (3.14) x ≡ 2 (mod 8), ⎪ ⎩ x ≡ 3 (mod 19).

Quanti sono allora gli studenti? La stessa dimostrazione del Teorema cinese dei resti ci insegna come determinare la soluzione. Infatti qui si ha R1 = 8 · 19 = 152, R2 = 5 · 19 = 95, R3 = 5 · 8 = 40 e quindi una soluzione `e 3 · 152 + 6 · 95 + 11 · 40 = 1466 ≡ 706 mod 760. Poich´e 706 `e l’unica soluzione minore di 1000, questo `e il numero di studenti richiesto.

` utile dare una conseguenza o, se si vuole, una diversa interpretazione E del Teorema cinese dei resti. Sia Zr × Zs l’insieme prodotto cartesiano di Zr e Zs . Essendo Zr e Zs anelli, anche Zr × Zs ha una struttura naturale di anello prodotto, le cui operazioni sono

128

3 Dall’infinito al finito def

(¯ ar , ¯bs ) + (¯ cr , d¯s ) = (¯ ar + c¯r , ¯bs + d¯s ), def cr , d¯s ) = (¯ ar · c¯r , ¯bs · d¯s ). (¯ ar , ¯bs ) · (¯

La seguente proposizione `e immediata conseguenza del Teorema cinese dei resti. Proposizione 3.4.5. Siano r ed s due interi maggiori di 1 e relativamente primi. L’applicazione f : Zrs −→ Zr × Zs ,

definita ponendo

f ([x]rs ) = ([x]r , [x]s ), `e un isomorfismo di anelli. Dimostrazione. In virt` u del teorema cinese dei resti il sistema di congruenze  x ≡ a (mod r), x ≡ b (mod s) ammette una ed una sola soluzione modulo rs. Questo ci garantisce la suriettivit` a e la iniettivit`a della applicazione. Il fatto che tale applicazione conservi le operazioni viene lasciato da dimostrare al Lettore (cfr. Esercizio A3.40). ⊓ ⊔ Esempio 3.4.6. Scriviamo esplicitamente la corrispondenza f nel caso r = 2 e s = 3. Z6 Z2 Z3 0 0 0 1 1 1 2 0 2 3 1 0 4 0 1 5 1 2 L’applicazione definita nell’enunciato della Proposizione 3.4.5 si pu` o descrivere anche nel seguente modo. Si scrivono in colonna tutti gli elementi di Zrs . Accanto ad essi, in una seconda colonna, si scrivono tutti gli elementi di Zr ripetuti s volte. Accanto ancora, in una terza colonna si scrivono tutti gli elementi di Zs ripetuti r volte. La corrispondenza f `e quella che associa al k-esimo elemento di Zrs la coppia di Zr × Zs immediatamente alla sua destra. Il Lettore potr` a agevolmente verificare il risultato. La Proposizione 3.4.5 ha un’applicazione importante nel campo dei calcolatori, perch´e permette di trasportare calcoli in Zn a calcoli indipendenti in vari Zni , per i = 1, . . . , r, nel caso in cui sia n = n1 n2 · · · nr , con M CD(ni , nj ) = 1 per i = j. Il prossimo esempio ci permette di capire appieno il vantaggio di questa possibilit` a.

3.5 Esempi

129

Esempio 3.4.7. Supponiamo di dovere fare delle operazioni in Z21 , in particolare di dover moltiplicare la classe 17 per la classe 19. Essendo 21 = 3 · 7, con M CD(3, 7) = 1, anzich´e lavorare in Z21 , potremo utilizzare la corrispondenza f della Proposizione 3.4.5, che per comodit`a del Lettore scriviamo esplicitamente nella tabella 3.1. Tabella 3.1. Identificazione di Z21 con Z3 × Z7 Z21 Z3 Z7 0 0 0 1 1 1 2 2 2 3 0 3 4 1 4 5 2 5 6 0 6

Z21 Z3 Z7 7 1 0 8 2 1 9 0 2 10 1 3 11 2 4 12 0 5 13 1 6

Z21 Z3 Z7 14 2 0 15 0 1 16 1 2 17 2 3 18 0 4 19 1 5 20 2 6

Dalla tabella risulta che 17 `e identificabile con la coppia (¯23 , ¯37 ), mentre 19 ¯7 ). Allora, anzich´e fare il prodotto 17 · 19 in Z21 basta `e identificabile con (¯ 13 , 5 fare separatamente il prodotto ¯ 2·¯ 1 in Z3 e il prodotto ¯3 · ¯5 in Z7 . Si ottiene 17 ), che corrisponde all’elemento ¯8 di Z21 che `e la stessa classe 23 , ¯ la coppia (¯ che si sarebbe ottenuta operando in Z21 . Il fatto che le operazioni in Z3 e in Z7 si possono fare separatamente, ossia sono indipendenti le une dalle altre, permette ad esempio di usare due diversi computer che operano in parallelo.

3.5 Esempi 3.5.1 Il calendario perpetuo Una semplice applicazione delle congruenze `e la compilazione del calendario. Le congruenze si prestano bene a questa applicazione a causa della periodicit` a della durata dell’anno. Supponiamo di volere sapere il giorno della settimana corrispondente ad un dato giorno, mese ed anno, per esempio di volere sapere che giorno della settimana corrispondeva al 5 maggio del 1851. ` chiaro che la risposta dipender` E a dal modo di contare il tempo. Ricordiamo che il calendario `e una suddivisione del tempo ad uso civile o religioso, stabilita in base a fenomeni astronomici. Nei calendari solari, come quello giuliano, l’anno corrisponde al tempo impiegato dalla terra per compiere una rivoluzione attorno al sole. Questo tipo di calendario viene usato in Europa e nelle Americhe. Il calendario giuliano, introdotto da Giulio Cesare nel 46 a.C., considerava l’anno di 365 giorni esatti e aggiungeva ogni quattro anni un giorno, ottenendo un anno bisestile di 366 giorni, per tenere conto di quella che si pensava fosse, in base alle conoscenze del tempo, la vera lunghezza di un anno, cio`e circa 365 giorni e 6 ore.

130

3 Dall’infinito al finito

Questa non era per` o che una approssimazione un po’ rozza della vera lunghezza dell’anno che risulta per la precisione di 365, 2422 giorni, un po’ pi` u breve quindi di quella conosciuta da Giulio Cesare. L’uso di tale approssimazione comport` o, nel corso dei secoli, un progressivo allontanarsi del calendario civile da quello astronomico, col risultato che il primo non rispettava pi` u le scadenze del secondo: in particolare gli equinozi e i solstizi, dunque gli inizi delle stagioni, non cadevano pi` u nelle date prestabilite. Fu quindi necessaria una correzione, voluta nel 1582 dal papa Gregorio XIII, i cui astronomi osservarono che il calendario civile era allora indietro di 10 giorni sul calendario astronomico. Papa Gregorio decise dunque, con un editto emanato a Villa Mondragone in Frascati, attualmente propriet` a dell’Universit` a degli Studi di Roma “Tor Vergata”, di cancellare questi 10 giorni passando direttamente dal 5 ottobre 1582 al 15 ottobre 1582. Egli dichiar` o poi bisestili tutti gli anni divisibili per 4, tranne gli anni divisibili per 100 che erano bisestili solo se anche divisibili per 400. Se ne deduce che 1700, 1800, 1900 non sono stati anni bisestili, mentre 1600 e 2000 lo sono stati. In questo modo la misura dell’anno `e quasi quella effettiva, si guadagnano solo 3 giorni in 10000 anni! Il calendario che ne `e risultato, e che `e quello che usiamo oggi, `e chiamato calendario gregoriano. Cerchiamo dunque di affrontare il nostro problema usando il calendario gregoriano. Poich´e per convenzione il giorno extra negli anni bisestili si aggiunge al mese di febbraio, per comodit` a assegnamo un numero ad ogni mese, a cominciare dal mese di marzo, cosicch´e i mesi di gennaio e febbraio saranno conteggiati nell’anno precedente. Per esempio consideriamo il mese di febbraio del 1952 come dodicesimo mese del 1951, mentre il mese di ottobre del 1952 sar` a l’ottavo mese del 1952. Facciamo una cosa analoga per i giorni della settimana assegnando un numero ad ognuno di essi a cominciare dallo zero che corrisponde alla domenica. Per comodit` a del Lettore riportiamo esplicitamente le tabelle di corrispondenza per i giorni e i mesi nella tabella 3.2. Tabella 3.2. Numerazione dei giorni e dei mesi domenica = 0 luned`ı =1 marted`ı = 2 mercoled`ı = 3 gioved`ı =4 venerd`ı = 5 sabato =6

marzo aprile maggio giugno luglio agosto

=1 =2 =3 =4 =5 =6

settembre ottobre novembre dicembre gennaio febbraio

=7 =8 =9 = 10 = 11 = 12

Poich´e i giorni della settimana si ripetono ogni sette, sar` a necessario nell’affrontare il nostro problema contare modulo 7. In questo modo, un giorno di una settimana qualsiasi sar` a sempre identificato dallo stesso numero. Indichiamo ora con g = giorno del mese, s = secolo,

m = mese,

a = anno,

y = anni nel secolo.

Per esempio se stiamo parlando del 1 aprile del 1673 allora g = 1, m = 2 e a = 1673 = 100s + y, dove s = 16 e y = 73. Indichiamo ora con x il giorno della

3.5 Esempi

131

settimana che corrisponde ai dati (g, m, a). Usando il primo marzo 1600 come punto di partenza, calcoliamo nell’ordine: • • •

il giorno ga della settimana del primo marzo di un anno a qualsiasi, con a ≥ 1600; il giorno della settimana del primo del mese di un mese di un anno qualsiasi; il giorno della settimana di un giorno, di un mese di un anno qualsiasi.

Poich´e ci sono 366 o 365 giorni fra il primo marzo dell’anno a − 1 e il primo marzo dell’anno a, a seconda che a sia bisestile o non lo sia, `e chiaro che vale la seguente legge ricorsiva:  ga ≡7 ga−1 + 366 ≡7 ga−1 + 2 se a `e bisestile, ga ≡7 ga−1 + 365 ≡7 ga−1 + 1 se a non `e bisestile. In definitiva, ga ≡ g1600 + (a − 1600) + b

(mod 7),

dove b `e il numero di anni bisestili fra il 1600 escluso (perch´e partiamo dal 1 marzo) e l’anno a incluso, mentre a − 1600 `e il numero di anni trascorsi a partire dal 1600 e fino all’anno a. Per calcolare b occorre trovare tutti i numeri della forma 1600 + p con 1 ≤ p ≤ a − 1600 che sono divisibili per 4, sottrarre da questi quelli divisibili per 100 e aggiungere quelli divisibili per 400. Dividendo a − 1600 per 4 si ha a − 1600 = q · 4 + r con 0 ≤ r < 4 e quindi { 4, 8, . . . , 4q } `e proprio l’insieme dei numeri positivi minori od uguali ad a − 1600 che sono divisibili per 4. Essi sono esattamente q, con   a − 1600 . q= 4 Si ha allora       a − 1600 a − 1600 a − 1600 b= − + = 4 100 400 #a$ # a $ # a $ #a$ # a $ # a $ = − 400 − + 16 + −4= − + − 388 4 100 400 4 100 400

e quindi, ricordando che a = 100 · s + y, in termini di s e y si trova #s$ #y$ + − 3 − 1600 (mod 7) ≡ ga ≡ g1600 − 2s + y + # 4s $ # y4 $ + (mod 7). ≡ g1600 − 2s + y + 4 4

A questo punto siamo in grado di calcolare ga per ogni anno a purch´e sappiamo o, basta guardare il calendario di quest’anno e vedere ricavare g1600 . Ma per fare ci` che l’1 marzo 2006 cade di mercoled`ı, cio`e g2006 = 2. Poich´e per a = 2006 = 100 s+y abbiamo s = 20, y = 6, allora dalla precedente relazione si ha 3 ≡ g1600 −40+6+5+1 (mod 7), quindi g1600 ≡ 31 ≡ 3 (mod 7), cio`e l’1 marzo del 1600 cadeva di mercoled`ı. Otteniamo cos`ı la formula generale #s$ #y$ + (mod 7). (3.15) ga ≡ 3 − 2s + y + 4 4

132

3 Dall’infinito al finito

Ora, usando lo stesso tipo di argomentazione, cerchiamo di calcolare il giorno che corrisponde al primo giorno del mese di un mese qualsiasi. Ad esempio, se l’1 ottobre dell’anno a cade di gioved`ı allora l’1 novembre dello stesso anno cadr` a di domenica. Infatti detto t il giorno corrispondente al primo di novembre si ha t ≡ 4 + 31 (mod 7), perch´e ottobre ha 31 giorni, gioved`ı corrisponde al numero 4 e t = 3 + 4 = 7 ≡ 0 (mod 7) rappresenta la domenica. In definitiva, il primo del mese si ottiene aggiungendo un numero di giorni, che dipende dalla lunghezza del mese, al primo del mese precedente. Precisamente abbiamo dall’1 dall’1 dall’1 dall’1 dall’1 dall’1 dall’1 dall’1 dall’1 dall’1 dall’1

marzo all’1 aprile dobbiamo aggiungere aprile all’1 maggio ” maggio all’1 giugno ” giugno all’1 luglio ” luglio all’1 agosto ” agosto all’1 settembre ” settembre all’1 ottobre ” ottobre all’1 novembre ” novembre all’1 dicembre ” dicembre all’1 gennaio ” gennaio all’1 febbraio ”

3 2 3 2 3 3 2 3 2 3 3

giorni, giorni, giorni, giorni, giorni, giorni, giorni, giorni, giorni, giorni, giorni.

La funzione che rappresenta l’incremento che abbiamo descritto `e   13m − 1 − 2. 5 Ci` o si pu` o verificare semplicemente sostituendo il valore m corrispondente ai mesi. In definitiva se indichiamo con x il giorno che dobbiamo calcolare e che corrisponde ai dati g, m, a otteniamo la formula che vogliamo aggiungendo g − 1 (giorni) alla formula che esprime il giorno corrispondente al primo dello stesso mese e anno, cio`e   #s$ #y$ 13m − 1 + (mod 7) ≡ − 2 + 3 − 2s + y + x≡g−1+ 5 4 4   #s$ #y$ 13m − 1 ≡g+ + (mod 7). − 2s + y + 5 4 4 A titolo di esempio calcoliamo il giorno corrispondente al 9 maggio 1973. Essendo g = 9, m = 3 e 1973 = 100s + y con s = 19 e y = 73 otteniamo x ≡ 9 + 7 − 38 + 73 + 4 + 18 ≡ 3

(mod 7),

cio`e il giorno cadeva di mercoled`ı.

3.5.2 Girone all’italiana Si tratta di preparare il tabellone per un torneo di N squadre di calcio (o di un qualsiasi altro sport a squadre) in modo che ogni squadra incontri ogni altra squadra esattamente una volta. Se N `e dispari, poich´e in ogni incontro giocano 2 squadre diverse, aggiungiamo una squadra fittizia e assegnamo un turno di riposo alla squadra cui viene assegnato nel dato turno l’incontro con la squadra fittizia. In tal modo

A3 Esercizi di carattere teorico

133

tutte le squadre sono trattate nello stesso modo e possiamo supporre che N sia un numero pari. Ovviamente il numero di giornate di gioco da fissare perch´e ogni squadra possa incontrare tutte le altre esattamente una volta `e N − 1. Assegnamo un numero fra 1 e N alle squadre e supponiamo di dover disporre gli incontri della giornata k-esima, con 1 ≤ k ≤ N −1. Procediamo cos`ı: se 1 ≤ i ≤ N −1 facciamo giocare la squadra i con la squadra j se i+j ≡k

(mod (N − 1)).

(3.16)

Questo assegna ad ogni squadra un’unica squadra competitrice nella giornata kesima, a meno che la squadra non sia contraddistinta dal numero i tale che 2i ≡ k (mod (N − 1)). Poich´e N − 1 `e dispari, questa congruenza ha un’unica soluzione. Ci` o determina un’unica squadra cui nella giornata k-esima assegnamo di competere con la squadra N . Lasciamo al Lettore il facile compito di verificare che la legge che abbiamo appena definito fa effettivamente incontrare ogni squadra con ogni altra una sola volta durante le N − 1 giornate di gioco (cfr. Esercizio A3.42).

Appendice al Capitolo 3 A3 Esercizi di carattere teorico A3.1. Dimostrare che la relazione di congruenza modulo n data nella Definizione 3.1.1 `e una relazione di equivalenza, cio`e che `e riflessiva, simmetrica e transitiva. A3.2. Si ricordi che una relazione R su un insieme A `e un sottoinsieme di A × A. Di solito si scrive che a R b per indicare che (a, b) ∈ R. Una relazione R si dice riflessiva se a R a per ogni a ∈ A. Si dice che R `e simmetrica se a R b implica che b R a, per ogni a, b ∈ A. Infine R `e detta transitiva se a R b e b R c implicano che a R c, per ogni a, b, c ∈ A. Una relazione R si dice di equivalenza se `e riflessiva, simmetrica e transitiva. Si dimostri che le condizioni che definiscono una relazione di equivalenza sono indipendenti, dando esempi di una: (a) relazione riflessiva e simmetrica, ma non transitiva; (b) relazione riflessiva e transitiva, ma non simmetrica; (c) relazione simmetrica e transitiva, ma non riflessiva. A3.3. Ricordiamo che una relazione R in un insieme A si dice anti-simmetrica se a R b e b R a implica che a = b, per ogni a, b ∈ A. Una relazione d’ordine `e una relazione riflessiva, anti-simmetrica e transitiva. Sia R la seguente relazione definita sui numeri naturali: a R b se e solo se esiste ` una relazione d’ordine? E se consideriamo un numero naturale c tale che b = ac. E la stessa relazione R sui numeri interi? A3.4. Si dimostri che le classi di congruenza modulo l’intero positivo n sono esattamente le n indicate a pagina 112. A3.5. Dimostrare la Proposizione 3.1.4 di pagina 113.

134

3 Dall’infinito al finito

A3.6. Dimostrare che le operazioni definite in Zn , con n ≥ 1, a pagina 113 sono ben definite e muniscono Zn di una struttura di anello unitario. A3.7.* Sia A un anello e ne sia I un ideale. Si provi che ≡I `e una relazione di equivalenza. A3.8.* Sia A un anello e ne sia I un ideale. Si provi che valgono le (3.2). A3.9.* Sia A un anello e ne sia I un ideale proprio. Mostrare che le operazioni definite in A/I a pagina 114, nel corso dell’Osservazione 3.1.6 sono ben definite e muniscono A/I di una struttura di anello. A3.10.* Sia A un anello commutativo unitario e ne sia I un ideale. Si consideri l’applicazione π : A → A/I che associa ad ogni a ∈ A la sua classe in A/I. Si provi che se J `e un ideale di A/I allora π −1 (J) `e un ideale di A che contiene I e viceversa che, se K `e un ideale di A che contiene I allora π(K) `e un ideale di A/I tale che π −1 (π(K)) = K. A3.11. Si dimostri che in Z vale la seguente legge di cancellazione: se ac = bc e c = 0, allora a = b.

(3.17)

Si dimostri che tale legge di cancellazione vale pi` u in generale in ogni dominio di integrit` a. A3.12.* Sia A un anello unitario e ne sia I un ideale proprio. Mostrare che A/I `e un dominio di integrit` a se e solo se I `e un ideale primo. A3.13. Dimostrare la Proposizione 3.1.11. ` vero che Zn `e un campo se e solo se `e un dominio di integrit` a? A3.14. E (a) S`ı, perch´e un anello commutativo con unit` a `e un campo se e solo se `e un dominio di integrit` a con unit` a. (b) S`ı. (c) No. (d) No, perch´e esistono dei domini di integrit` a che non sono campi. ` vero che Zn `e un campo se e solo se n `e un numero primo? A3.15. E (a) (b) (c) (d)

S`ı. No. No, perch´e se Zn `e un campo non `e detto che n sia primo. Nessuna delle precedenti.

A3.16. Fissato un numero intero positivo b, possiamo associare ad ogni numero intero n, scritto in base b come (ah . . . a1 a0 )b , e dunque di lunghezza h+1, il polinomio fn (x) = a0 + a1 x + · · · + ah xh di grado h in Zb [x]. Dimostrare che l’applicazione f : N → Zb [x] cos`ı costruita `e biiettiva e che per essa si ha fn+m (x) = fn (x) + fm (x), ma non `e vero in generale che fn·m (x) = fn (x) · fm (x).

A3 Esercizi di carattere teorico

135

A3.17. Dimostrare che la complessit` a dell’operazione di addizione di due polinomi di grado al pi` u m in Zn [x] `e O(m log n). A3.18. Dimostrare che la complessit` a dell’operazione di moltiplicazione di due polinomi di grado al pi` u m in Zn [x] `e O(m2 log2 n). A3.19. Determinare una procedura per effettuare una prova dell’11 per i numeri scritti in base 10. A3.20.* Provare che per ogni intero positivo n, si ha (b − 1) | bn−1 e (b + 1) | (bn + (−1)n+1 ). Dedurne un criterio di divisibilit` a per b − 1 e uno per b + 1 a partire dalle cifre dei numeri interi scritti in base b. (Suggerimento: procedere come nel caso b = 10.) A3.21. Determinare una procedura per effettuare l’analogo della prova del nove o della prova dell’11 in una base qualunque b. A3.22.* Utilizzare la congruenza 40 ≡ 1 (mod 13) per costruire un test di divisibilit` a per 13. Nei successivi esercizi si richiamano alcune utili propriet` a dei gruppi ciclici. Di norma penseremo a gruppi con struttura moltiplicativa. A3.23. Provare che (Z, +) `e un gruppo ciclico infinito. Provare che (Zn , +) `e un gruppo ciclico di ordine n. A3.24.* Si provi che un gruppo ciclico infinito `e isomorfo al gruppo additivo di Z mentre un gruppo ciclico finito di ordine n `e isomorfo al gruppo additivo di Zn . A3.25.* Si provi che un sottogruppo di un gruppo ciclico `e anch’esso ciclico. A3.26.* Se G `e un gruppo ciclico con generatore x e ha ordine finito n, si provi che gli elementi di G sono 1, x, x2 , . . . , xn−1 . A3.27.* Sia x un elemento di periodo m di un gruppo G. Provare che xn = 1 se e solo se m | n. A3.28.* Sia x un elemento di ordine finito m di un gruppo G. Dimostrare che le potenze di x formano un sottogruppo ciclico di G di ordine m. A3.29.* Se G `e un gruppo ciclico con generatore x e ha ordine finito n, si provi che xh = xk se e solo se h ≡ k (mod n). In particolare xm = 1 se e solo se n | m. A3.30.* Se G `e un gruppo ciclico con generatore x e ha ordine finito n, l’elemento xm `e un generatore di G se e solo se M CD(m, n) = 1. Se ne deduca che G possiede ϕ(n) generatori distinti. A3.31.* Se G `e un gruppo ciclico con generatore x ed `e infinito, gli unici generatori sono x e x−1 . A3.32.* Se G `e un gruppo ciclico con generatore x e ha ordine finito n, e se d `e un divisore di n, esiste uno e un solo sottogruppo di ordine d di G. A3.33.* Sia G un gruppo ciclico con generatore x e di ordine finito n. Si abbia n = dm. L’elemento xh ha ordine d se e solo se h ≡ mi (mod n) con M CD(i, d) = 1. Se ne deduca che G possiede ϕ(d) elementi distinti di ordine d.

136

3 Dall’infinito al finito

A3.34.* Sia G un gruppo ciclico con generatore x e di ordine finito n e ne siano y1 = xn1 , y2 = xn2 due elementi. Si dica per quali interi m si ha y1m = y2 . A3.35.* Se G `e ciclico infinito ogni sottogruppo di G diverso da (1) `e ciclico infinito. A3.36.* Provare il Teorema di Lagrange che afferma che, se G `e un gruppo finito e H ne `e un sottogruppo, allora l’ordine di H divide quello di G. A3.37.* Dimostrare il teorema di Eulero come conseguenza del fatto che il periodo di un elemento divide l’ordine di un gruppo finito. A3.38. Dimostrare che se conosciamo ϕ(n) e se M CD(a, n) = 1, allora la complessit` a del calcolo di am mod n `e O(log3 n). A3.39. Si consideri il sistema di congruenze  x ≡ a (mod n), x ≡ b (mod m), nel quale non si chiede che sia M CD(n, m) = 1. Si diano le condizioni affinch´e tale sistema sia risolubile. (Suggerimento: la compatibilit` a `e equivalente all’esistenza di un intero t tale che a − b + tn ≡ 0 (mod m). Si applichi allora la Proposizione 3.3.4). A3.40. Dimostrare che l’applicazione f della Proposizione 3.4.5 conserva la somma e il prodotto, cio`e f (y + z) = f (y) + f (z) e f (yz) = f (y)f (z) per ogni y, z ∈ Zrs . A3.41. Estendere la Proposizione 3.4.5 a pi` u fattori, ossia provare che se r1 , . . . , rs sono interi positivi a due a due primi tra loro, posto r = r1 · · · rs , l’ovvia applicazione [x]r ∈ Zr → ([x]r1 , . . . , [x]rs ) ∈ Zr1 × · · · × Zrs `e un isomorfismo di anelli. A3.42. Si verifichi che la legge descritta a pagina 133 fa effettivamente incontrare ognuna delle N squadre con ogni altra una sola volta durante le N − 1 giornate di gioco di un girone all’italiana.

B3 Esercizi di carattere computazionale B3.1. Quanti elementi ha Z1472 ? (a) (b) (c) (d)

Nessun elemento. 1471. 1472. Nessuna delle precedenti.

B3.2. Quanto vale 36728 mod 11? (a) (b) (c) (d)

10. 5. 1. Nessuna delle precedenti.

B3 Esercizi di carattere computazionale B3.3. Esistono divisori dello zero in Z6 ? (a) (b) (c) (d)

No. S`ı, ce ne sono esattamente due. S`ı, ce ne sono esattamente tre. Nessuna delle precedenti.

B3.4. Esistono divisori dello zero in Z19 ? (a) (b) (c) (d)

No. S`ı, ce ne sono esattamente tre. S`ı, ce ne sono esattamente nove. Nessuna delle precedenti.

` vero che Z27 `e un campo? B3.5. E (a) (b) (c) (d)

S`ı. No. No, anche se non possiede divisori dello zero. Nessuna delle precedenti.

B3.6. Determinare l’ultima cifra del numero 725843594 . B3.7. Trovare la classe resto modulo 9 di 746h , al variare di h ∈ N. B3.8. Trovare il resto della divisione per 10 del numero 4381620321 . B3.9. Determinare il resto della divisione per 6 del numero 29345362971 . B3.10. Determinare il resto della divisione per 6 del numero 36297129345 . B3.11. In quale classe resto modulo 9 si trova 725843594 ? B3.12. Qual `e il resto della divisione di 239487192387 per 6? (a) (b) (c) (d)

3. 2. 1. Nessuna delle precedenti.

B3.13. Qual `e il resto della divisione di 75746322845301 per 7? (a) (b) (c) (d)

2. 3. 4. Nessuna delle precedenti.

B3.14. Qual `e il resto della divisione di 75746322845301 per 11? (a) (b) (c) (d)

0. 1. 10. Nessuna delle precedenti.

137

138

3 Dall’infinito al finito

B3.15. Trovare l’inverso, se esiste, delle seguenti classi in Z8 : ¯ 6, ¯ 3. B3.16. Qual `e l’inverso di 4 modulo 9? (a) (b) (c) (d)

Non esiste. 5. 7. Nessuna delle precedenti.

B3.17. Qual `e l’inverso di 4 modulo 18? (a) (b) (c) (d)

Non esiste. 11. 15. Nessuna delle precedenti.

B3.18. Trovare le ultime due cifre di tutti i numeri x ≥ 0 tali che  3x ≡ 1 (mod 4), 2x ≡ 3 (mod 25). B3.19. Senza effettuare la divisione, dire se `e divisibile per 11 il numero 129873498712738753786. (a) (b) (c) (d)

No, non `e divisibile per 11. Non si pu` o dire senza effettuare la divisione. S`ı, `e divisibile per 11. Nessuna delle precedenti.

` corretta l’operazione 273498 · 587234 = 160607234532? B3.20. E (a) (b) (c) (d)

S`ı, `e corretta perch´e supera la prova del nove. S`ı, `e corretta. No, non `e corretta perch´e non supera la prova del nove. No, non `e corretta, anche se supera la prova del nove.

B3.21. Dire se il numero 100100110 in base 2 `e divisibile per 2, 4, 3. B3.22. Dire se il numero 12002122 in base 3 `e divisibile per 2, 3, 9, 4. B3.23. Determinare un criterio di divisibilit` a per 3 a partire dalle cifre dei numeri interi scritti in base 9. B3.24. Determinare tutte e sole le soluzioni della congruenza 3x ≡ 5 (a) (b) (c) (d)

x = 3 + 4k, per ogni k ∈ Z. x = 1 + 2k, per ogni k ∈ Z. Non ha soluzioni. Nessuna delle precedenti.

(mod 4).

B3 Esercizi di carattere computazionale

139

B3.25. Determinare tutte e sole le soluzioni della congruenza 3x ≡ 9 (a) (b) (c) (d)

(mod 6).

x = 3 + 6k, per ogni k ∈ Z. x = 1 + 2k, per ogni k ∈ Z. Non ha soluzioni. Nessuna delle precedenti.

B3.26. Determinare tutte e sole le soluzioni della congruenza 4x ≡ 7 (a) (b) (c) (d)

(mod 9).

x = −5 + 9k, per ogni k ∈ Z. x = 1 + 3k, per ogni k ∈ Z. x = 5 + 9k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.27. Determinare tutte e sole le soluzioni della congruenza 6x ≡ 8 (a) (b) (c) (d)

(mod 9).

x = 3 + 9k, per ogni k ∈ Z. x = −1 + 3k, per ogni k ∈ Z. Non ha soluzioni. Nessuna delle precedenti.

B3.28. Determinare tutte e sole le soluzioni della congruenza 4x ≡ 3 (a) (b) (c) (d)

(mod 385).

x = 74 + 385k, per ogni k ∈ Z. x = 75 + 385k, per ogni k ∈ Z. x = −1 + 385k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.29. Si costruisca, se esiste, una congruenza lineare del tipo ax ≡ b

(mod 319)

che ammetta esattamente 11 soluzioni non congruenti tra loro modulo 319. Scritta tale congruenza, se ne determinino tutte le soluzioni. B3.30. Determinare due interi a e b (se esistono) in modo tale che la congruenza ax ≡ b

(mod 299)

abbia esattamente 13 soluzioni non congruenti tra loro modulo 299. Una volta trovati tali a e b, risolvere la congruenza, determinando tutte le soluzioni. B3.31. Determinare tutte e sole le soluzioni della congruenza lineare 128x ≡ 10

(mod 17).

140 (a) (b) (c) (d)

3 Dall’infinito al finito Non esistono soluzioni. 3 + 17k, per ogni k ∈ Z. 5 + 17k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.32. Determinare tutte e sole le soluzioni della congruenza lineare 3128x ≡ 3 (a) (b) (c) (d)

(mod 1024).

Non esistono soluzioni. 513 + 1024k, per ogni k ∈ Z. 1007 + 1024k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.33. Determinare tutte e sole le soluzioni della congruenza lineare 2047x ≡ 3 (a) (b) (c) (d)

(mod 1024).

3 + 1024k, per ogni k ∈ Z. 319 + 1024k, per ogni k ∈ Z. 1021 + 1024k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.34. Determinare tutte e sole le soluzioni della congruenza lineare 2047x ≡ 1022 (a) (b) (c) (d)

(mod 1024).

2 + 1024k, per ogni k ∈ Z. 3 + 1024k, per ogni k ∈ Z. −1 + 1024k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.35. Determinare il resto della divisione per 17 di 190597 . B3.36. Verificare che 1731 ≡ 41 (mod 58).

B3.37. Dimostrare che 313 ≡ 3 (mod 7) usando il teorema di Eulero. B3.38. Quanto vale 4065 mod 199?

(a) (b) (c) (d)

5. 71. 193. Nessuna delle precedenti.

B3.39. Quanto vale 2733 mod 157? (a) (b) (c) (d)

2. 64. 82. Nessuna delle precedenti.

B3 Esercizi di carattere computazionale B3.40. Quanto vale 3196 mod 359? (a) (b) (c) (d)

1. 79. 283. Nessuna delle precedenti.

B3.41. Consideriamo il sistema di congruenze  x ≡ 7 (mod 9), x ≡ 3 (mod 5). Tale sistema ammette soluzioni? Se s`ı, quali? (a) (b) (c) (d)

S`ı, le soluzioni sono x = −34 + 45k, per ogni k ∈ Z. S`ı, le soluzioni sono x = 34 + 45k, per ogni k ∈ Z. S`ı, le soluzioni sono x = 43 + 45k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.42. Consideriamo il sistema di congruenze ⎧ ⎪ ⎨1025x ≡ 5312065 (mod 8), 36x ≡ 322 (mod 5), ⎪ ⎩ 4x ≡ 7 (mod 3). Tale sistema ammette soluzioni? Se s`ı, quali?

(a) (b) (c) (d)

S`ı, le soluzioni sono x = 77 + 120k, per ogni k ∈ Z. S`ı, le soluzioni sono x = −21 + 120k, per ogni k ∈ Z. S`ı, le soluzioni sono x = 82 + 120k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.43. Determinare tutte e sole le soluzioni del sistema di congruenze lineari  3x ≡ 65 (mod 7), 11x ≡ 4 (mod 17). (a) (b) (c) (d)

111 + 119k, per ogni k ∈ Z. 11 + 119k, per ogni k ∈ Z. −12 + 119k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.44. Determinare tutte e sole le soluzioni del sistema di congruenze lineari ⎧ ⎪ ⎨2x ≡ 1 (mod 3), 8x ≡ 7 (mod 11), ⎪ ⎩ 5x ≡ 3 (mod 13).

(a) Non esistono soluzioni. (b) 368 + 429k, per ogni k ∈ Z.

141

142

3 Dall’infinito al finito

(c) 5 + 429k, per ogni k ∈ Z. (d) Nessuna delle precedenti. B3.45. Determinare tutte e sole le soluzioni del sistema di congruenze lineari ⎧ ⎪ (mod 6), ⎨2x ≡ 4 8x ≡ 3 (mod 13), ⎪ ⎩ 12x ≡ 1 (mod 18).

(a) (b) (c) (d)

Non esistono soluzioni. 107 + 351k, per ogni k ∈ Z. −107 + 351k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.46. Determinare tutte e sole le soluzioni del ⎧ ⎪ ⎨4x + 2 ≡ 3x − 1 6x − 3 ≡ 2(x − 1) ⎪ ⎩ 2x ≡ 1

(a) (b) (c) (d)

sistema lineare di congruenze (mod 5), (mod 7), (mod 3).

57 + 105k, per ogni k ∈ Z. 101 + 105k, per ogni k ∈ Z. −103 + 105k, per ogni k ∈ Z. Nessuna delle precedenti.

B3.47. La Signora Bianchi fa la spesa per la famiglia ogni sabato mattina e fa il bagno al suo cucciolo ogni 5 giorni. Questa settimana ha lavato il cucciolo di domenica (11 marzo). Quando (se mai) succeder` a la prima volta che dovr` a fare la spesa e lavare il cucciolo lo stesso giorno? B3.48. Stiamo riordinando una biblioteca. Disponendo i libri in pile di 11, i libri che restano sono 4; disponendoli in pile di 13, i libri che restano sono 5; infine, disponendoli in pile da 17 libri resta fuori un solo libro. Sapendo che la biblioteca non contiene pi` u di 2500 libri, sapreste determinare il numero esatto di libri presenti nella biblioteca? B3.49. Abbiamo un vassoio pieno di caramelle e sappiamo di sicuro che ce ne sono meno di 200. Supponiamo che, distribuendone 11 per volta restino due caramelle, che distribuendone 5 per volta ne restino 3 e che distribuendone 3 per volta non ne resti nessuna. Determinare il numero di caramelle presenti nel vassoio. (a) (b) (c) (d)

123. 138. 153. Nessuna delle precedenti.

B3.50. Se da una scatola di bottoni si tolgono i bottoni a due a due, a tre a tre, a quattro a quattro, a cinque a cinque, a sei a sei, nella scatola resta sempre un bottone. Se si tolgono a sette a sette, non ne resta nessuno. Qual `e il minimo numero di bottoni che potevano trovarsi nella scatola?

C3 Esercizi di programmazione (a) (b) (c) (d)

143

241. 601. 301. Nessuna delle precedenti.

B3.51. Risolvere il sistema di congruenze ⎧ ⎪ ⎨−11 · x ≡ 117 (mod 4), 395 · x ≡ −7 (mod 3), ⎪ ⎩ 18 · x ≡ −25 (mod 7).

B3.52. Che giorno della settimana `e stato il 31 dicembre 2000?

(a) (b) (c) (d)

Gioved`ı. Venerd`ı. Sabato. Domenica.

B3.53. Che giorno della settimana `e stato il 28 febbraio 2004? (a) (b) (c) (d)

Gioved`ı. Venerd`ı. Sabato. Domenica.

B3.54. Che giorno della settimana `e stato il 14 luglio 1789? (a) (b) (c) (d)

Sabato. Domenica. Luned`ı. Marted`ı.

B3.55. Che giorno della settimana sar` a l’1 gennaio 3001? (a) (b) (c) (d)

Domenica. Luned`ı. Marted`ı. Gioved`ı.

B3.56. Si scriva esplicitamente il calendario di un girone all’italiana di 6 squadre secondo il metodo descritto nel capitolo.

C3 Esercizi di programmazione C3.1. Si scriva un programma che calcoli la somma di due numeri interi a e b modulo un intero positivo n. C3.2. Si scriva un programma che calcoli il prodotto di due numeri interi a e b modulo un intero positivo n.

144

3 Dall’infinito al finito

C3.3. Si scriva un programma che calcoli l’inverso di un numero a modulo n, cio`e il numero x tale che ax ≡ 1 (mod n). C3.4. Si scriva un programma che calcoli am mod n con il metodo descritto nel testo. C3.5. Si scriva un programma che verifichi se una congruenza lineare ax ≡ b (mod n) ammette o non ammette soluzioni e, in caso affermativo, determini quali. C3.6. Si scriva un programma che verifichi se un sistema di m congruenze lineari ammette o non ammette soluzioni e, in caso affermativo, determini quali. C3.7. Si scriva un programma che, dati r, s e x, calcoli l’immagine di x secondo la funzione f : Zrs → Zr × Zs definita nella Proposizione 3.4.5. C3.8. Si scriva un programma che, dati r, s primi tra loro e (y, z), calcoli la controimmagine di (y, z) secondo la funzione f : Zrs → Zr × Zs definita nella Proposizione 3.4.5. C3.9. Si scriva un programma che calcoli il giorno della settimana di una data secondo il calendario gregoriano. C3.10. Si scriva un programma che stenda il calendario di un girone all’italiana con n squadre.

4 Finito non basta: problemi di fattorizzazione

Nei capitoli precedenti abbiamo pi` u volte incontrato la nozione di numero primo (cfr. § 1.3.1, Osservazione 3.1.10 ecc.). In questo capitolo approfondiamo questo concetto, provando innanzitutto il Teorema Fondamentale dell’Aritmetica 4.1.2, ben noto fin dalle scuole inferiori, che in sostanza afferma che i numeri primi sono i mattoni a partire dai quali, usando la moltiplicazione, si possono ottenere tutti i numeri interi. Da questo teorema ricaveremo varie conseguenze importanti, deducendone ad esempio una formula per il calcolo della funzione ϕ di Eulero (cfr. § 3.3), e molto altro. Inquadreremo inoltre il concetto di numero primo in un contesto pi` u generale, discutendo analoghe nozioni in un anello qualunque, e tra questi, l’anello dei polinomi su un campo. Come vedremo in seguito, i numeri primi e il Teorema Fondamentale dell’Aritmetica giocano un ruolo essenziale nelle applicazioni alla crittografia e ai codici. Ma come si riconosce se un numero `e primo? Pi` u specificamente, dato un numero qualunque, come si scrive come prodotto di numeri primi? In questo capitolo discuteremo alcuni algoritmi classici, e dunque elementari, volti a tali scopi. Si vedr` a che purtroppo tali algoritmi sono in generale esponenziali e quindi di scarsa utilit` a pratica. Si render` a necessaria allora la individuazione di algoritmi pi` u efficienti, che richiedono strumenti matematici un po’ pi` u avanzati, e che discuteremo in seguito (cfr. Capitolo 6).

4.1 Numeri primi Ricordiamo (cfr. paragrafo 1.3) che un numero primo p `e un intero maggiore di 1 che non ha altri divisori a parte ±p e ±1. Un numero primo si dice talvolta anche irriducibile in accordo con la definizione pi` u generale che vedremo in seguito (cfr. Definizione 4.5.1). Ovviamente un numero non primo si dice riducibile oppure composto.

146

4 Finito non basta: fattorizzazione di interi

4.1.1 Il Teorema Fondamentale dell’Aritmetica Come `e ben noto fin dalla scuola elementare, a partire dai numeri primi si pu` o ottenere, mediante la moltiplicazione, in modo essenzialmente unico, ogni altro numero intero positivo. Questo `e il contenuto del cosiddetto Teorema Fondamentale dell’Aritmetica, gi`a ben noto ad Euclide, che lo espose nel Libro VII ` necessario premettere al Teorema Fondamentale dell’Adei suoi Elementi. E ritmetica la seguente semplice, ma importante, caratterizzazione dei numeri primi, sulla quale torneremo per alcuni importanti commenti in seguito. Proposizione 4.1.1. Un numero intero positivo p > 1 `e irriducibile se e solo se vale la seguente propriet` a: (P ) ogni qualvolta p divide un prodotto ab, allora o p divide a oppure p divide b. Dimostrazione. Supponiamo che p sia irriducibile e proviamo che vale la (P ). Supponiamo dunque che p divida ab e che p non divida a. Poich´e p non divide a, e poich´e p non ha altri fattori che ±p e ±1, si ha che p e a non hanno fattori non banali in comune, ossia M CD(a, p) = 1. Quindi esistono interi s e t tali che 1 = sa + tp. Moltiplicando per b ambo i membri, si ottiene b = sab + tpb. Dato che p | ab e p | p, si conclude che p | b. Viceversa, supponiamo che valga la (P ). Se p non fosse primo, avremmo p = hk con h, k interi minori di p. D’altra parte p | hk = p e quindi o p | h oppure p | k, relazioni entrambe assurde, perch´e h e k sono minori di p. ⊓ ⊔ Possiamo ora dimostrare il: Teorema 4.1.2 (Teorema Fondamentale dell’Aritmetica). intero maggiore di 1. Allora n = ph1 1 ph2 2 ph3 3 · · · phs s ,

Sia n un (4.1)

dove p1 , p2 , . . . , ps sono numeri primi distinti e gli esponenti hj sono positivi, per ogni j = 1, . . . , s. Inoltre l’espressione (4.1) di n, detta decomposizione in fattori primi o fattorizzazione di n, `e unica a meno dell’ordine. Dimostrazione. Dimostriamo separatamente esistenza e unicit` a della fattorizzazione. • Esistenza della fattorizzazione. Procederemo per induzione sull’intero n da fattorizzare. Se n = 2 non vi `e nulla da dimostrare. Supponiamo allora di avere provato l’esistenza di una fattorizzazione per ogni intero positivo k, con 2 ≤ k < n, e dimostriamo la stessa cosa per n. Se n `e primo, non c’`e nulla da dimostrare. Sia quindi n riducibile, sicch´e possiamo scrivere n = ab, con a e b positivi ed entrambi maggiori di 1 e quindi minori di n. Allora, per l’ipotesi induttiva, a e b sono fattorizzabili in un prodotto di primi

4.1 Numeri primi

a = p1 p2 · · · pr ,

147

b = p1 p2 · · · ps .

Quindi n = p1 p2 · · · pr p1 p2 · · · ps . Ovviamente basta raggruppare, a secondo membro della precedente uguaglianza, i numeri primi fra loro uguali per ottenere il risultato nella forma (4.1). • Unicit` a della fattorizzazione. Per dimostrare l’unicit` a della fattorizzazione per ogni intero n, procederemo per induzione sul numero m di fattori irriducibili di una qualche fattorizzazione di n. Si noti che il numero di fattori che appare nella fattorizzazione (4.1) `e m = h1 + h2 + · · · + hs . Se m = 1, significa che il numero n che ha quella come fattorizzazione `e un primo p. Supponiamo che n = p abbia un’altra fattorizzazione p = q1k1 q2k2 · · · qtkt . Essendo p un primo che divide il secondo membro, p divider` a uno dei fattori del secondo membro, ad esempio p | q1 (cfr. Proposizione 4.1.1). Anche q1 `e primo, quindi non ha fattori propri, da cui p = q1 . Per la legge di cancellazione, valida in Z, si ottiene 1 = q1k1 −1 q2k2 · · · qtkt . Questa relazione implica che tutti gli esponenti a secondo membro sono nulli, altrimenti avremmo un prodotto di interi maggiori di 1 il cui prodotto d` a 1. Allora il secondo membro si riduce a q1 e quindi p = q1 `e l’unica fattorizzazione di n. Abbiamo cos`ı provato la base dell’induzione. Supponiamo ora che l’unicit` a della fattorizzazione sia stata provata per ogni intero che abbia una fattorizzazione in m − 1 fattori irriducibili. Sia n un intero che ha una fattorizzazione in m fattori irriducibili. Siano allora n = ph1 1 ph2 2 · · · phs s = q1k1 q2k2 · · · qtkt due fattorizzazioni di n in fattori irriducibili, la fattorizzazione di sinistra avendo m fattori irriducibili, cio`e h1 + h2 + · · · + hs = m. Ora, p1 `e un primo che divide il secondo membro, quindi divider` a ad esempio q1 (cfr. ancora la Proposizione 4.1.1). Come prima, risulta p1 = q1 , e quindi, per la legge di cancellazione, si ha ph1 1 −1 ph2 2 · · · phs s = q1k1 −1 q2k2 · · · qtkt dove al primo membro il numero di fattori irriducibili `e m − 1. Per l’ipotesi induttiva vale in questo caso l’unicit` a della fattorizzazione, e dunque i qj coincidono con i pi , a meno dell’ordine. Ma allora `e chiaro che anche la fattorizzazione di n `e unica. ⊓ ⊔

148

4 Finito non basta: fattorizzazione di interi

4.1.2 Distribuzione dei numeri primi Quanti sono i numeri primi? Era gi` a noto ad Euclide il seguente teorema di cui esistono varie dimostrazioni. Diamo qui proprio quella, del tutto elementare, risalente ad Euclide. Teorema 4.1.3. Esistono infiniti numeri primi. Dimostrazione. Supponiamo che l’insieme dei numeri primi sia finito, costituito ad esempio dai numeri p1 < p2 < · · · < pn . Consideriamo il numero N = p1 · · · pn + 1. Questo numero non `e primo, perch´e maggiore di pn che, per ipotesi, `e il numero primo pi` u grande. Allora N ha una decomposizione in fattori primi e cio`e possiamo scrivere N = ph1 1 · · · phnn con almeno uno dei numeri h1 , . . . , hn positivo. Supponiamo sia hi > 0. Allora pi | N . Inoltre pi | (N − 1) = p1 · · · pn . Quindi pi | 1 = N − (N − 1), il che `e assurdo, dato che pi > 1. ⊓ ⊔ Abbiamo gi` a detto che di questo teorema esistono varie dimostrazioni. Ora ne forniamo una, basata su un famoso teorema di Eulero (per un’altra ancora, pure dovuta a Eulero, cfr. Esercizio A4.6). Teorema 4.1.4 (Eulero). La serie dei reciproci dei numeri primi diverge. Ossia se {p1 , . . . , pn , . . .} `e la successione, eventualmente finita, di tutti i numeri primi in ordine crescente, si ha ∞  1 = ∞. p n n=1 Di questo teorema non `e difficile dare un cenno di dimostrazione basata sulle propriet` a della famosa funzione zeta definita da ζ(s) =

∞  1 . s n n=1

Notiamo innanzitutto che: (1) ζ `e ben definita e converge se s ∈ R ∩ (1, +∞); (2) lims→1 (s − 1)ζ(s) = 1, e quindi ovviamente (3) lims→1 ζ(s) = +∞. Per il punto (1) basta osservare che % ∞ % x dt dt x1−s − 1 1 = lim = lim = s s x→+∞ 1 t x→∞ t 1−s s−1 1 e quindi converge. Per il punto (2) si osservi che   n % n+1   1 dt   −  < 1.  s s  t t  1 t=1

(4.2)

4.1 Numeri primi

149

Infatti basta considerare il grafico della funzione y = 1/xs e interpretare geometricamente la differenza a primo membro: lasciamo i dettagli al Lettore (cfr. Esercizio A4.5). Calcolando l’integrale a primo membro si trova   n   1 1 1   − ) (1 −  0, indichiamo con π(x) il numero di primi p tali che p ≤ x, non esiste una formula per il calcolo di tale funzione in termini di funzioni elementari. Tuttavia Gauss, nel 1792, all’et` a di 15 anni, e prima di lui Legendre, congetturarono che π(x) fosse asintoticamente uguale a una funzione molto semplice, cio`e alla funzione x/(log x), ossia che valesse la relazione di limite

4.1 Numeri primi

lim

x→∞

151

π(x) = 1. x log x

Un passo importante verso tale congettura fu fatto nel 1851 da Chebishev, che prov` o il seguente risultato: Teorema 4.1.8 (Chebishev). Esistono due numeri A e B, con 0 < A ≤ 1 e 1 ≤ B ≤ 2, tali che per ogni n ∈ N sufficientemente grande valga la relazione A

n n ≤ π(n) ≤ B . log n log n

La congettura di Legendre e Gauss fu provata solo alla fine del XIX secolo da Hadamard e de la Vall´ee Poussin con metodi analitici e il teorema `e noto come il Teorema dei Numeri Primi (cfr. [56]). Notiamo che al teorema dei numeri primi si pu` o dare una interpretazione probabilistica: dato un intero positivo n, la probabilit` a che un intero positivo p < n scelto a caso tra 2 e n sia primo `e π(n)/n che, per n molto grande, `e dello stesso ordine di grandezza di 1/log n. Facciamo un semplice esempio: supponiamo di voler trovare un numero primo con 100 cifre decimali, cio`e un numero dell’ordine di n = 10100 . La probabilit` a che un numero scelto a caso tra quelli con al pi` u 100 cifre decimali sia primo `e, per quanto detto ora, 1/log(10100 ) ∼ 1/230. Ci` o significa che, con 230 tentativi, possiamo sperare di ottenere un numero primo di quell’ordine di grandezza. Possiamo migliorare ulteriormente tale probabilit` a, scartando i numeri pari (che sono la met` a) e i multipli di 3 (che sono 1/3): in definitiva i numeri che possiamo scartare sono 2/3 = 1/2 + 1/6 (multipli di due sommati ai multipli di 3 che non sono pari). Dunque la probabilit` a di trovare un primo diventa 1/77. Allo scopo di illustrare come vanno le cose, diamo qui di seguito i valori di π(x), di [x/(log x)] e del loro rapporto per x = 103 , x = 106 e 109 : x

103

106

109

π(x)

168

78.498

50.847.478

[x/(log x)]

145

72.382

48.254.942

[π(x)(log x)/x] 1,159 . . . 1,084 . . . 1,053 . . . Le considerazioni che abbiamo svolto vanno complementate con un’altra semplice osservazione: dato comunque un intero positivo n, esistono n interi consecutivi che non sono primi. Basta infatti considerare gli interi consecutivi (n + 1)! + 2, (n + 1)! + 3, (n + 1)! + 4, . . . , (n + 1)! + (n + 1). Ciascuno di questi numeri `e riducibile: il primo divisibile per 2, il secondo per 3, fino all’ultimo che `e divisibile per n + 1.

152

4 Finito non basta: fattorizzazione di interi

Questo sembrerebbe dire che pi` u grandi diventano i numeri primi pi` u essi sono ` proprio cosi? distanziati. Eppure. . . E Per illustrare quanto poco si sappia in merito a questa semplice domanda, diamo ancora una definizione: Definizione 4.1.9. Due numeri interi positivi p e p + 2 entrambi primi si dicono numeri primi gemelli. Ad esempio coppie di primi gemelli sono date da (3, 5), (5, 7), (11, 13), (17, 19), (41, 43), . . . , (2111, 2113). Il numero dei numeri primi gemelli minori di 1011 `e 224.376.048 (cfr. ad esempio [45]). Vi sono esempi isolati di numeri primi gemelli con pi` u di mille cifre decimali. Tuttavia non si sa ancora se esistano o meno infinite coppie di primi gemelli, anche se si congettura che la risposta a tale domanda sia affermativa. Per contrasto, va citato il seguente teorema, che il Lettore paragoner` a al teorema di Eulero 4.1.4 citato dianzi (cfr. ancora [56]): Teorema 4.1.10 (Brun, 1919). primi gemelli converge. Ossia se

La serie dei reciproci delle coppie dei numeri

{ p1 , p1 + 2, . . . , pn , pn + 2, . . . } `e la successione, eventualmente finita, di tutte le coppie di numeri primi gemelli in ordine crescente, si ha  ∞   1 1 + < ∞. pn pn + 2 n=1 Si noti che ci` o non implica affatto che la successione delle coppie di numeri primi gemelli sia finita. L’esistenza di primi gemelli comunque grandi non `e una pura curiosit` a: essa ha infatti importanza in informatica, essendo legata all’esistenza di primi gemelli la possibilit` a di alcuni efficienti sistemi per l’archiviazione di dati nei computer (cfr. [46], § 4.4). Terminiamo questo paragrafo enunciando la pi` u famosa congettura tuttora insoluta riguardante i numeri primi, la congettura di Goldbach (1742): ogni numero positivo pari maggiore di 2 `e somma di due primi. La congettura `e stata verificata per tutti i numeri pari minori di 3 · 1017 . Diamo qualche esempio relativo ai numeri bassi: 4 = 2 + 2,

14 = 7 + 7,

6 = 3 + 3,

16 = 3 + 13,

8 = 3 + 5,

18 = 5 + 13,

10 = 5 + 5,

20 = 3 + 17,

12 = 5 + 7,

22 = 11 + 11.

Il Lettore potr` a trovare divertente leggere il bel romanzo di A. Doxiadis [21], che riguarda appunto questa famosa congettura.

4.1 Numeri primi

153

4.1.3 Il crivello di Eratostene ` importante osservare che il Teorema Fondamentale dell’Aritmetica ci gaE rantisce che ogni intero positivo si scrive in modo unico come prodotto di numeri primi, ma non fornisce alcun algoritmo per determinare la fattorizzazione di un numero dato. Si tratta del tipico esempio di teorema teorico, ma non costruttivo. In realt` a trovare la decomposizione di un numero in fattori primi `e un problema tutt’altro che facile, anzi, al momento attuale delle nostre conoscenze matematiche e tecnologiche, in pratica irresolubile se si tratta di fattorizzare numeri molto grandi. Questo `e un punto che il Lettore dovr` a imparare a tenere ben presente ora e nel seguito! Infatti, come vedremo, non `e noto alcun algoritmo di fattorizzazione che si possa programmare su un qualunque computer di cui oggi disponiamo, il quale abbia tempo polinomiale. Proprio sulla difficolt` a di decomporre un numero in fattori primi si basa la attuale sicurezza di certi sistemi crittografici, cio`e la possibilit` a di trasmissione di dati segreti tra due soggetti senza che ad essi possano accedere terzi incomodi. Di ci` o riparleremo nei prossimi capitoli. Altra questione importante e, in qualche modo, collegata alla precedente `e: come si fa a riconoscere se un numero `e primo? Gli algoritmi volti a riconoscere se un dato numero `e o meno primo si dicono test di primalit` a . Il metodo pi` u antico `e il cosiddetto crivello di Eratostene che si impara fin dalla scuola elementare e sul quale ci tratteniamo in questo paragrafo. Come vedremo, questo `e un algoritmo esponenziale, e dunque anch’esso ben poco efficiente se si applica a numeri grandi, perch´e in pratica `e un algoritmo di fattorizzazione pi` u che un mero test di primalit` a. Esistono invece test di primalit` a di varia natura ben pi` u efficienti, tra i quali uno polinomiale scoperto di recente da Agrawal, Kayal e Saxena (cfr. [2]). Su tutto ci` o torneremo nel Capitolo 6. Ma torniamo al crivello di Eratostene (276-194 a.C.), il quale permette, in linea di principio, di determinare tutti i primi minori o uguali di un fissato numero intero positivo n. Il modo pi` u naturale, ma non certo il pi` u economico, per decidere se un numero n `e primo consiste nel verificare che non `e divisibile per nessuno dei numeri che lo precedono, cio`e 2, 3, 4, . . ., n − 1. Il seguente risultato, basato sul Teorema Fondamentale dell’Aritmetica, riduce il numero di divisioni da fare. Proposizione 4.1.11. Se un intero positivo n non `e divisibile per nessun √ primo che `e minore o uguale a n, allora n `e primo. Dimostrazione. Supponiamo che n sia riducibile, cio`e n = ab con a e b interi tali che 1 < a√< n e 1 < b < n. Sicuramente uno dei√due √ fattori a o b `e minore o uguale a n: se cos`ı non fosse sarebbe n = ab > n · n = n,√il che `e assurdo. Dunque n ha un fattore, ad esempio a, minore o uguale a n. Se esso `e primo, abbiamo dimostrato la proposizione. Altrimenti, a ha comunque √ un fattore primo p, e risulter`a p < a ≤ n. ⊓ ⊔

154

4 Finito non basta: fattorizzazione di interi

Esempio 4.1.12. Per provare che il numero 397 `e primo, √ basta provare che non `e divisibile per nessun primo minore o uguale a 397, cio`e che non `e divisibile per 2, 3, 5, 7, 11, 13, 17 e 19. Il Lettore potr` a verificare facilmente da s´e questa circostanza. L’osservazione contenuta nella Proposizione 4.1.11 pu` o sembrare non importante quando si ha a che fare con numeri piccoli, ma quando i numeri con cui si tratta sono grandi appare evidente il risparmio di tempo nel fare i calcoli atti a verificare se un numero `e primo o no. Se vogliamo usare il risultato precedente dobbiamo per` o conoscere i numeri √ o essere un problema. Possiamo per`o primi minori o uguali a n, e questo pu` usare il risultato u debole, verificando se n `e divisibile√per 2, √ in una forma pi` 3, 4, 5, . . ., [ n], ossia per tutti i numeri interi minori od uguali a n. In definitiva: (1) se n non `e divisibile per nessuno di questi, allora n `e un numero primo; (2) altrimenti, detto n1 un fattore di n trovato, si ripete lo stesso procedimento con n1 e n/n1 (che `e un intero) e alla fine si arriver` a alla fattorizzazione completa di n in fattori primi. Purtroppo non si tratta di un metodo efficiente perch´e la sua complessit` a `e esponenziale. Possiamo infatti stimare il numero di operazioni bit occorrenti per verificare se un numero n `e primo o no con questo metodo. Il teorema dei numeri primi ci dice che vi sono approssimativamente √ √ n 2 n √ = log n log n √ numeri primi minori o uguali di n. Tenendo presente la formula (2.9), vediamo che il numero di operazioni bit occorrenti √ per verificare se n `e primo dividendolo per tutti i primi minori o uguali di n `e almeno   √ √ 2 n log2 n = O( n log n) = O(keck ), O log n dove k `e la lunghezza di n e c `e una costante. L’algoritmo `e pertanto esponenziale. Va tuttavia sottolineato che il procedimento `e pi` u che un mero test di primalit` a perch´e non solo dice se un dato numero `e primo, ma fornisce anche una fattorizzazione nel caso in cui il numero risulti composto. Per determinare esclusivamente i numeri primi minori o uguali a un dato numero n, si pu` o procedere in modo leggermente diverso. Si scrivono tutti i numeri minori o uguali di n, a partire da 2, che viene sottolineato perch´e `e primo. Poi si cancellano tutti i multipli di 2 (perch´e non sono primi). Si sottolinea poi il primo numero non cancellato, ossia 3, e si cancellano tutti i multipli di 3, sempre perch´e non sono primi, e cos`ı via, finch´e non ci siano √ numeri non cancellati minori o uguali a n.

4.1 Numeri primi

155

Ebbene, tutti i numeri sottolineati, assieme a tutti quelli che non sono stati cancellati, forniscono la lista completa di tutti i numeri primi minori o uguali di n. I numeri non cancellati sono primi√per il fatto che, non essendo divisibili per nessun primo minore o uguale di n, non hanno alcun divisore non banale, in virt` u della Proposizione 4.1.11. Il termine crivello deriva proprio dal procedimento pratico di cancellazione successiva dei numeri non primi che abbiamo appena spiegato. Mostriamo come funziona, passo per passo, il procedimento, nel caso in cui si vogliano trovare tutti i primi minori o uguali di 100. •

Passo 1. Si scrivono tutti i numeri da 2 a 100: 11 21 31 41 51 61 71 81 91



3 13 23 33 43 53 63 73 83 93

4 14 24 34 44 54 64 74 84 94

5 15 25 35 45 55 65 75 85 95

6 16 26 36 46 56 66 76 86 96

7 17 27 37 47 57 67 77 87 97

8 18 28 38 48 58 68 78 88 98

9 19 29 39 49 59 69 79 89 99

10 20 30 40 50 60 70 80 90 100

Passo 2. Si sottolinea 2 e si eliminano tutti i multipli di 2: 11 21 31 41 51 61 71 81 91



2 12 22 32 42 52 62 72 82 92

2 3 13 23 33 43 53 63 73 83 93

Passo 3. Si sottolinea il successivo multipli di 3: 2 3 11 13 23 31 41 43 53 61 71 73 83 91 91

5 15 25 35 45 55 65 75 85 95

7 17 27 37 47 57 67 77 87 97

9 19 29 39 49 59 69 79 89 99

numero primo, che `e 3, e si eliminano tutti i 5 25 35 55 65 85 95 95

7 17 37 47 67 77 97 97

19 29 49 59 79 89

156 •

4 Finito non basta: fattorizzazione di interi Passo 4. Si sottolinea il numero primo successivo, 5, e si eliminano i suoi multipli: 11 31 41 61 71

2 3 13 23

5

37 47

43 53

67 77

73 83

91 •

7 17

19 29 49 59 79 89

97

Passo 5. Si sottolinea il numero primo successivo, 7, e si eliminano i suoi multipli: 11 31 41 61 71

2 3 13 23

5

43 53

7 17

19 29

37 47 59 67

73 83

79 89 97

A questo punto abbiamo terminato perch´e il successivo primo `e 11, che √ `e maggiore di 10 = 100. I numeri sottolineati pi` u tutti quelli che sono sopravvissuti alle cancellazioni sono i numeri primi minori di 100. Anche questo metodo per trovare i primi minori di un dato numero non `e efficiente: un calcolo analogo a quello svolto poche pagine dianzi mostra che esso `e esponenziale (cfr. Esercizio A4.7). Ad esempio, nel 1979 `e stato provato, per tutt’altra via, che il numero a 13395 cifre 244497 − 1 `e primo: se ci si fosse serviti del crivello di Eratostene, un computer che facesse un milione di moltiplicazioni al secondo avrebbe impiegato 106684 anni per ottenere questo risultato!

4.2 Numeri primi e congruenze Cominciamo questo paragrafo tornando su una importante questione lasciata aperta nel paragrafo § 3.3, e cio`e sul calcolo della funzione ϕ di Eulero. 4.2.1 Il calcolo della funzione di Eulero Cominciamo col dare la seguente definizione: Definizione 4.2.1. Una funzione f : N \ {0} → N \ {0} si dice moltiplicativa se f (r · s) = f (r) · f (s) ∀ r, s : M CD(r, s) = 1.

4.2 Numeri primi e congruenze

157

La funzione f si dice completamente moltiplicativa se f (r · s) = f (r) · f (s)

∀ r, s ∈ N \ {0}.

Dalla stessa definizione di funzione moltiplicativa e dal Teorema Fondamentale dell’Aritmetica, segue che: Proposizione 4.2.2. Sia f : N \ {0} → N \ {0} una funzione moltiplicativa. Se n = ph1 1 ph2 2 · · · phs s , con pi primi distinti per i = 1, . . ., s, allora f (n) = f (ph1 1 )f (ph2 2 ) · · · f (phs s ).

(4.3)

In altre parole, possiamo calcolare il valore f (n) di una funzione moltiplicativa f per un intero n se: • si conosce la fattorizzazione di n; • si conosce il valore di f su tutte le potenze dei numeri primi. La propriet` a basilare della funzione di Eulero `e che essa `e moltiplicativa, e questo `e l’ingrediente essenziale che ci permette di calcolare la funzione di Eulero su tutti gli interi dei quali conosciamo la fattorizzazione in numeri primi: Proposizione 4.2.3. La funzione ϕ di Eulero `e moltiplicativa. Quindi, se n = ph1 1 ph2 2 · · · phs s , con pi primi distinti per i = 1, . . ., s, allora ϕ(n) = ϕ(ph1 1 )ϕ(ph2 2 ) · · · ϕ(phs s ).

(4.4)

Inoltre, se p `e un numero primo, allora ϕ(ph ) = ph − ph−1 . In particolare ϕ(p) = p − 1. Dunque si ha     1 1 ··· 1 − . ϕ(n) = n · 1 − p1 ps

(4.5)

(4.6)

Dimostrazione. La formula (4.4) segue dalla Proposizione 4.2.2, una volta nota la moltiplicativit` a della funzione ϕ. La formula (4.6) segue immediatamente dalla (4.4) e dalla (4.5). Dimostriamo dunque la moltiplicativit` a della funzione ϕ. Sia n = rs, con M CD(r, s) = 1. I numeri m tali che 0 ≤ m < n si possono rappresentare (cfr. Proposizione 3.4.5) come coppie del tipo (m mod r, m mod s). Inoltre il Lettore pu` o verificare (cfr. Esercizio A4.2) che un intero m `e relativamente primo con il prodotto rs di r ed s se e solo se M CD(m mod r, r) = 1

e

M CD(m mod s, s) = 1.

158

4 Finito non basta: fattorizzazione di interi

Dunque il numero totale ϕ(rs) degli m modulo rs primi con rs `e ϕ(r) · ϕ(s), perch´e gli elementi modulo r primi con r nel primo elemento della coppia sono in numero di ϕ(r) e quelli modulo s primi con s nel secondo elemento della coppia sono in numero di ϕ(s). Per completare la dimostrazione, rimane da provare la formula (4.5). A tale scopo, basta osservare che non sono primi con ph solo i multipli di p, e questi sono del tipo p · i, con 1 ≤ i ≤ ph−1 , e quindi sono in numero di ph−1 .

⊓ ⊔

La proposizione precedente ci permette di calcolare la funzione di Eulero per ogni intero n del quale si conoscano i fattori primi, cio`e del quale si conosca la fattorizzazione. Ad esempio ϕ(108) = ϕ(22 · 33 ) = ϕ(22 )ϕ(33 ) = (22 − 2)(33 − 32 ) = 36. Una immediata conseguenza della Proposizione 4.2.3 e del Teorema di Eulero 3.3.11 `e il seguente risultato (cfr. anche Esercizi A3.14, A3.15): Proposizione 4.2.4. Sia n > 1 un intero positivo. Allora Zn `e un campo se e solo se n `e primo. Dimostrazione. Ovviamente Zn `e un campo se e solo se U (Zn ) = Zn \ {0}. Per il Corollario 3.3.7, U (Zn ) ha ordine ϕ(n) e pertanto Zn `e un campo se e solo se ϕ(n) = n − 1, il che, per la Proposizione 4.2.3, capita se e solo se n `e primo. ⊓ ⊔ 4.2.2 Il Piccolo Teorema di Fermat Ricordando ora il Teorema di Eulero 3.3.11, possiamo dedurne immediatamente il: Teorema 4.2.5 (Piccolo Teorema di Fermat). Sia a un intero e p un numero primo. Allora (4.7) ap ≡ a (mod p) e, se a non `e divisibile per p, si ha ap−1 ≡ 1

(mod p).

(4.8)

Dimostrazione. Se a `e divisibile per p, allora vale banalmente la (4.7), in quanto ap ≡ a ≡ 0 (mod p). Se a non `e divisibile per p allora la (4.8) segue dal Teorema di Eulero e la (4.7) segue moltiplicando ambo i membri per a. ⊓ ⊔ Segnaliamo che si possono dare dimostrazioni elementari dirette del Piccolo Teorema di Fermat e del Teorema di Eulero, che non facciano uso di propriet` a dei gruppi, ma solo del Teorema Fondamentale dell’Aritmetica (cfr. Esercizi A4.11, A4.12).

4.2 Numeri primi e congruenze

159

Il Piccolo Teorema di Fermat si pu`o usare per creare un test di primalit` a, o, pi` u precisamente, per verificare se un numero non `e primo, in quanto se esiste a tale che an ≡ a (mod n), allora n non `e primo. Ad esempio, n = 10 non `e primo perch´e 210 ≡ 2 (mod 10). In genere si cerca un a piccolo, ad esempio si prova con a = 2, in modo da tenere sotto controllo i calcoli. Si noti che questo test di non primalit` a , se funziona, ci assicura che il numero non `e primo, ma non ci permette di trovare una fattorizzazione di n. Gli antichi matematici cinesi erano convinti che un numero n fosse primo se e solo se (4.9) 2n−1 ≡ 1 (mod n). Invece questo non `e vero, come mostra il seguente esempio. Esempio 4.2.6. Il numero composto 341 = 11 · 31 soddisfa la congruenza 2340 ≡ 1 (mod 341). Infatti, per il Piccolo Teorema di Fermat, si ha che 210 ≡ 1 (mod 11), quindi 2340 = (210 )34 ≡ 1 (mod 11) e inoltre 2340 = (25 )68 = 3268 ≡ 1 (mod 31). Le due congruenze implicano il risultato, per la Proposizione 3.1.11. Questo significa che (4.9) `e una condizione necessaria, ma non sufficiente, perch´e un numero sia primo. Il seguente risultato mostra che, con una ipotesi aggiuntiva, la formula (4.9) diviene una condizione anche sufficiente perch´e n sia primo. Diamo intanto una definizione: Definizione 4.2.7. Sia n un intero positivo e sia a un intero primo con n. L’ordine di [a] quale elemento del gruppo U (Zn ), ovvero il minimo intero positivo m tale che am ≡ 1 (mod n), si dice gaussiano di n rispetto ad a e si denota con Gss(n, a). Ad esempio, `e chiaro che Gss(7, 2) = 3. Il calcolo del gaussiano di due numeri non `e affatto banale. Tenendo presente quanto ricordato nell’Osservazione 3.3.12, si ha subito che: Corollario 4.2.8. Siano a e n interi relativamente primi. Allora: • Gss(n, a) divide ϕ(n); • se m `e un intero, si ha am ≡ 1 (mod n) se e solo se Gss(n, a) | m; • se i, j ∈ Z, si ha ai ≡ aj (mod n) se e solo se i ≡ j (mod Gss(n, a)).

160

4 Finito non basta: fattorizzazione di interi

Per qualche altra propriet` a basilare del gaussiano, si veda l’Esercizio A4.30. Ora possiamo enunciare il seguente risultato: Proposizione 4.2.9 (Lucas, 1876). Sia n > 1. Se esiste un intero a, con 1 < a < n, tale che Gss(n, a) = n − 1, ossia tale che (1) an−1 ≡ 1 (mod n), e (2) am ≡ 1 (mod n), per ogni m = 1, 2, . . ., n − 2,

allora n `e primo. Dimostrazione. Osserviamo innanzitutto che M CD(a, n) = 1, dato che questa `e la condizione necessaria e sufficiente affinch´e la congruenza ax ≡ 1 (mod n) abbia soluzioni (cfr. (3.3.4)). Supponiamo allora per assurdo che n non sia primo. Allora ϕ(n) `e strettamente minore di n−1 e, essendo M CD(a, n) = 1, in base al teorema di Eulero l’ordine di a dividerebbe ϕ(n) < n − 1, contraddicendo l’ipotesi. Dunque n `e primo. ⊓ ⊔ In definitiva, abbiamo che n `e primo se e solo se esiste un elemento a tale che Gss(n, a) = n − 1. Pi` u precisamente, possiamo dire che se esiste un intero a tale che an−1 ≡ 1 (mod n), allora n non `e primo per il Piccolo Teorema di Fermat. Se invece esiste un intero a di ordine n − 1 modulo n, allora n `e primo. Questo test non `e efficiente, perch´e si devono fare n − 2 moltiplicazioni successive per a e trovarne i resti modulo n, il che comporta una complessit` a esponenziale. Tuttavia Lucas stesso lo ha migliorato osservando che: Proposizione 4.2.10. Sia n > 1. Se esiste un intero a, con 1 < a < n, tale che (1) an−1 ≡ 1 (mod n), e (2) am ≡ 1 (mod n), per ogni m < n che divide (n − 1), allora n `e primo. Dimostrazione. Analoga a quella della Proposizione 4.2.9.

⊓ ⊔

` chiaro che, usando la precedente proposizione, si pu` E o ridurre il numero di moltiplicazioni e di riduzioni modulo n. Tuttavia per potere applicare questo test occorre conoscere tutti i fattori di n − 1, e questo `e fattibile solo quando n − 1 ha qualche forma speciale. Quindi, a meno che n − 1 non si fattorizzi facilmente, anche questo test `e esponenziale. Bench´e questi test abbiano complessit`a esponenziale, vedremo in seguito che essi possono comunque utilizzarsi per costruire dei nuovi test di primalit` a di tipo diverso, ossia di tipo probabilistico (cfr. § 6.1).

4.2 Numeri primi e congruenze

161

4.2.3 Il teorema di Wilson Vale il: Teorema 4.2.11 (Wilson). Se p `e un numero primo, allora (p − 1)! ≡ −1

(mod p).

Dimostrazione. Per p = 2 e p = 3 il teorema `e evidente. Supponiamo quindi p > 3. Si consideri la congruenza ax ≡ 1 (mod p), dove a `e uno degli interi 1, 2, . . . , p − 1. Dato che M CD(a, p) = 1, questa congruenza ammette una e una sola soluzione a′ modulo p, con 1 ≤ a′ < p. Per quali valori di a risulta a = a′ ? Per a = a′ la congruenza diventa a2 ≡ 1 (mod p), che equivale a dire che p divide (a + 1)(a − 1). Quindi o p divide a + 1 oppure p divide a − 1. Ne segue che a − 1 ≡ 0 (mod p), cio`e a = 1, oppure a + 1 ≡ 0, ossia a = p − 1. Tralasciando questi due valori estremi, gli altri elementi 2, 3, . . ., p − 2 si possono raggruppare in (p − 3)/2 coppie {a, a′ }, con a = a′ tali che aa′ ≡ 1 (mod p). Moltiplicando tra loro le corrispondenti congruenze, si ottiene 2 · 3 · · · · (p − 2) = (p − 2)! ≡ 1 (mod p). Ma allora, moltiplicando ambo i membri per p−1 ≡ −1 (mod p), si ha che (p−1)! ≡ p − 1 (mod p), cio`e la tesi. ⊔ ⊓ Vale anche il reciproco di questo teorema, cio`e si ha: Proposizione 4.2.12. Se (n − 1)! ≡ −1 (mod n), allora n `e primo. Dimostrazione. Se n non fosse primo, avrebbe un divisore c, con 1 < c < n, che, in quanto divisore di n, dividerebbe anch’esso (n − 1)! + 1. Ma c dovrebbe comparire anche tra i fattori di (n − 1)!, perch´e 1 < c < n, e quindi c | (n − 1)!. Dalle due relazioni ottenute si ottiene l’assurdo che c divide 1. ⊔ ⊓ Anche il Teorema di Wilson 4.2.11, assieme al suo inverso 4.2.12, ci offre una caratterizzazione dei numeri primi: n `e primo se e solo se (n − 1)! + 1 `e divisibile per n. Ad esempio n = 5 `e primo, perch´e (5 − 1)! = 24 ≡ −1 (mod 5), cio`e 24 + 1 `e divisibile per 5. Cos`ı come il Piccolo Teorema di Fermat, anche il Teorema di Wilson si presta alla creazione di un test di primalit` a. Il test funziona, in linea teorica, nel seguente modo: dato n, si calcola (n − 1)! + 1 e si verifica se tale numero `e o meno divisibile per n. Se lo `e, e solo in tal caso, n `e primo. Tuttavia un tale test `e inutilizzabile in pratica, perch´e si basa su un algoritmo esponenziale. Infatti, dato n, occorre innanzitutto calcolare (n − 1)!, e, se n `e un intero di lunghezza k, si ha T (n!) ∈ O(n2 k2 ) (cfr. Capitolo 2, in particolare gli Esercizi A2.9 e A2.23). In altri termini, il calcolo di (n − 1)! `e esponenziale. D’altra parte si pensi che, partendo ad esempio da un numero n con sole 4 cifre in base 10, il numero (n − 1)! pu` o avere fino a 35652 cifre decimali: un numero davvero impressionante e intrattabile.

162

4 Finito non basta: fattorizzazione di interi

4.3 Rappresentazione in base qualunque dei numeri razionali In questo paragrafo daremo la dimostrazione della Proposizione 1.4.7 che avevamo lasciato indimostrata. Dimostrazione della Proposizione 1.4.7. La dimostrazione procede nel seguente modo. Dato un qualunque numero razionale a tale che 0 < a < 1, mostreremo che a `e β–periodico, ossia che si ha un’espressione del tipo a = (0, c1 . . . cm cm+1 . . . cm+h )β

(4.10)

in base β. Inoltre mostreremo che (c1 . . . cm cm+1 . . . cm+h )β − (c1 . . . cm )β = (β − 1, . . . , β − 1, 0, . . . , 0)β       h

m

(4.11)

= (0, c1 . . . cm cm+1 . . . cm+h )β .

Veniamo alla prima parte della dimostrazione. Dato a = c/d dove la frazione `e ridotta, distingueremo tre casi: (1) ogni divisore primo di d `e divisore anche di β; (2) d `e primo con β; (3) d non `e primo con β, ma c’`e qualche divisore primo di d che non divide β. Caso (1). In questo caso esistono potenze di β divisibili per d. Sia β m la minima siffatta potenza, sicch´e si ha β m = dk. Allora a=

ck ck c = = m. d dk β

D’altra parte si ha ck = (am−1 . . . a0 )β = a0 + a1 β + · · · + am−1 β m−1 , in quanto a < 1 e dunque ck < β m . In conclusione, si ha a=

ck a0 + a1 β + · · · + am−1 β m−1 = = (0, am−1 am−2 . . . a0 )β , βm βm

ossia vale la (4.10), con h = 0 e ci = am−i , i = 1, . . . , m. Caso (2). In questo caso a non si pu` o esprimere come frazione con denominatore una potenza di β. Dato per` o un intero positivo h, esiste una e una sola frazione ah /β k che approssima per difetto a a meno di 1/β h , cio`e tale che

4.3 Rappresentazione in base qualunque dei numeri razionali

163

ah ah + 1