ICT news dicembre 2011 Speciale Android Risposta ai quesiti precedenti Siamo giunti quasi al termine del nostro viaggio nella sicurezza di Internet basata sulla crittografia RSA. Abbiamo discusso dell’algoritmo per il massimo comune divisore (MCD), poi sulla generazione efficiente di numeri primi. Ora il cerchio si chiude: torniamo al problema di partenza, quello di trovare i 2 divisori primi di un numero molto grande ottenuto con il loro prodotto. E’ l’occasione per ricordare due tecniche usate dai matematici per risolvere problemi nuovi e difficili: -sfruttare quello che già conosco e riutilizzare algoritmi precedenti -trovare un punto d’appoggio: è attribuita ad Archimede l’affermazione “Datemi un punto d’appoggio e solleverò il mondo” (per inciso, Archimede è uno dei più grandi matematici di tutti i tempi, ed è ormai accertato che è l’inventore del calcolo infinitesimale, 1800 anni prima di Leibniz e Newton). Dunque, conosco un buon algoritmo per il calcolo di MCD. Devo fattorizzare un numero N che è il prodotto di 2 numeri primi p e q. Mi farebbe comodo sfruttare il programma MCD, ma quello usa 2 numeri. Qui scatta l’intelligenza e il pensiero laterale. Trovo un punto d’appoggio: creo un numero casuale compreso fra 1 e N, e così ho 2 numeri. Poi riutilizzo (riciclo) l’algoritmo di Euclide per MCD: il gioco è fatto! Ecco il programma in Mintoris Basic per il vostro tablet Android: input “Numero da fattorizzare “, num for i = 1 to 500 m = 1 + rnd(num) n=num ‘riuso il programma per il calcolo di MCD con Euclide do while(m<>n) if (n > m) then n=n–m else m=m–n endif loop print “Divisibile per “,n next i Se non trovate il divisore, rilanciate il programma. Una variante appena un po’ più complessa di questo programma costituisce il migliore modo oggi conosciuto per scomporre un numero che è il prodotto di due primi. Come promesso, non calcola neanche un numero primo! Come è possibile? Occorre esaminare bene il problema: ho un numero che è il prodotto di 2 numeri primi. Il problema è quello di trovare 1 divisore che è ovviamente un primo. Sappiamo che trovare i numeri primi fino a N è oneroso e non sappiamo neanche quanti sono. Sappiamo invece che trovare MCD è possibile in modo efficiente grazie ad Euclide. Perciò non serve calcolare i primi fino a N. C’è un motto dei matematici, conosciuto come il rasoio di Occam: se posso fare una cosa in modo semplice, non devo farla in modo difficile; devo usare solo le teorie strettamente necessarie. Una buona parte dei successi dei grandi matematici risiede nella loro innata pigrizia: è bene non fare troppi sforzi, se è possibile! E’ la pigrizia, o se preferite la sobrietà, e naturalmente la creatività, il segreto del genio matematico. E’ celebre l’aneddoto dello studente Gauss, cui il professore aveva dato il compito di sommare i numeri da 1 a 100, mezzuccio puerile per tenere impegnati gli allievi, cui purtroppo ricorrono ancora oggi certi docenti. Gauss osservò che si possono sommare così: 1 + 100, 2 + 99, ecc. Quindi la somma vale 101 per 50, e in generale ((N +1 ) * N) / 2. Gauss aveva trovato la formula della somma di una progressione aritmetica di ragione 1. Morale: studenti non svolgete in modo stupido i compiti idioti che vi vengono assegnati! Gugliemo di Ockham, detto ‘Il dottore invincibile’. A lui si ispira il personaggio di Guglielmo da Baskerville nel romanzo Il nome della rosa di Umberto Eco (oltre che al Mastino di Sherlock Holmes) Occorre infine fare un’osservazione molto importante. L’algoritmo che abbiamo usato è diverso da tutti i precedenti: è un algoritmo probabilistico. Non possiamo garantire che trovi i divisori in n tentativi. Abbiamo messo 500 tentativi come esempio, ma bisogna fare esperimenti: più il numero da scomporre è grande, più tentativi si rendono necessari. La bontà del programma deve essere verificata statisticamente. Provate a scomporre 3872663. Buona sperimentazione! Finisco con la citazione di un film recente: I signori della truffa, con Robert Redford che cerca di imparare da un giovane matematico il metodo migliore per scomporre un numero grande in primi, e truffare le banche. Il consulente scientifico del fil altro non era che uno dei mitici tre dell’algoritmo RSA, precisamente Len Adleman. Come portare a casa una cassa di champagne con il vostro tablet Android e i numeri primi Marcus du Sautoy, autore del bel libro sui numeri primi che abbiamo citato in precedenza, rivela un aneddoto curioso. Teneva conferenze sulla sicurezza in Internet con l’algoritmo RSA a manager del mondo economico, notoriamente non particolarmente bravi in matematica, e spesso non molto intelligenti. Sfidava il pubblico a trovare i 2 fattori primi di 126619, entro le due ore della conferenza, e senza comunicare con l’esterno: in palio una cassa di champagne. A Venezia nessuno riuscì. In una città americana un banchiere barò clamorosamente, collegandosi di nascosto, via telefonino, con uno studente di matematica suo amico. A Bali un ascoltatore ci riuscì un minuto prima della scadenza, e vinse lo champagne. Se foste stati presenti voi, con il tablet e il nostro programmino, in un minuto avreste vinto. Ma siete ancora in tempo: andate alla prossima conferenza e guadagnate lo spumantino che, sotto Natale, può sempre far comodo. Applicazioni in evidenza nel Market Android Ricerca vocale: gratis (precaricata su Olivetti Olipad 110, tablet in vendita anche su Facebook/Olivetti e su ebay) Il sogno dell’intelligenza artificiale diventa realtà: 10 anni fa un sistema così vi costava 10 milioni, oggi zero euro. Potete dire a voce, ad esempio: ‘meteo Novara’, oppure ‘cerca Istituto Omar’. Non ha nemmeno bisogno di imparare la vostra particolare voce. L’ho provato: è ottimo. 1,11 euro: linguaggio C (e C++). Attenzione: per funzionare richiede l’installazione di un componente aggiuntivo (plug in) gratuito Gratuita (plug in): da installare prima di usare C4droid Un ambiente di sviluppo per realizzare programmi in C (e C++). L’ho provato e lo consiglio. Un esempio di programma che calcola il fattoriale un numero: int m long fatt(int n) { If (n == 0) return (1); else return (fatt ( n – 1); } main() { printf(“N? max 14”); scanf (“ %d”,&m); printf(“%ld”,fatt(m)); } Nota: il fattoriale di N è un numero che diventa enorme al crescere di N. Questo programmino fornisce il risultato corretto solo fino a 14. Per numeri grandi, se si vuole il risultato esatto, occorre avere un linguaggio con un’aritmetica in infinita precisione (come il LISP), oppure adottare particolari accorgimenti. Diventare ricchi con le applicazioni Android Le applicazioni sull’Android Market sono decine di migliaia: come abbiamo visto, molte sono gratuite, e quelle che si pagano costano pochissimo, di solito circa 1 euro. Tuttavia, spessissimo sono state acquistate online più di 10 mila volte l’anno. Fate un po’ di conti: realizzare una buona applicazione richiede circa un mese di lavoro. Inoltre, all’inizio, bisogna imparare il sistema di sviluppo, per circa un altro mese (una tantum). Ma si guadagnano 10000 euro in un anno, lavorando comodamente in casa, con gli orari più graditi. Parecchi lo fanno, anche in Italia. Bisogna onestamente precisare che lo sviluppo di applicazioni Android non è da tutti: si richiedono capacità di programmazione, che è la disciplina più difficile che esista. In pratica, può riuscirci un perito (o uno studente) di elettronica o di informatica dell’Omar, oppure chi ha fatto un buon liceo ( il Classico Carlo Alberto di Novara o lo Scientifico Pascal di Romentino) e poi ingegneria. Forniamo qui l’indicazione sui passi necessari e il software di sviluppo da scaricare (gratis). Sul prossimo numero diremo come iscriversi al Market Android per caricare (upload) le applicazioni. Buon arricchimento! 1. Scaricare e installare Java JDK da http://java.sun.com/javase/downloads/index.jsp 2. Scaricare e installare Android SDK da http://developer.android.com/sdk/index.html 3. Scaricare e installare l’ambiente Eclipse da http://www.eclipse.org/downloads Olimpiadi di Informatica Per la prima volta le olimpiadi internazionali di Informatica (IOI) si svolgeranno in Italia, dal 23 al 30 settembre 2012 a Sirmione e Montichiari (BS). Poiché l’Omar è l’unica scuola novarese con indirizzo Informatica e Telecomunicazioni (l’anno prossimo partirà la Terza Informatica), i nostri studenti possono essere interessati a partecipare, o anche solo a vedere che tipi di esercizi vengono proposti. Riportiamo qui alcuni test di carattere matematico, logico, algoritmico e di programmazione in C (gli studenti devono scegliere tra il linguaggio C e il Pascal). Sul prossimo numero le soluzioni. Ogni anno si svolgono anche le olimpiadi italiane, organizzate da MIUR e AICA 8la scadenza era il 17 novembre). Nelle olimpiadi internazionali il medagliere italiano vede 1 oro, 11 argenti e 18 bronzi. Ma, giocando in Italia… Il nostro oro è stato ottenuto da Luca Barbieri del Liceo Scientifico Carducci di Milano, nel 2004. Sempre nel 2004, Dario Cazzaro, di un ITIS come l’Omar, vinse la medaglia di bronzo. Quesiti Quiz matematico (facile) Considerando dadi normali a 6 facce numerate, è più probabile fare 6 con 1, 2 o 3 dadi? Quiz algoritmico (difficile) Sia dato il grafo stradale descritto dagli archi con distanze: a(n1,n2,2), a(n2,n3,5),a(n3,n4,3),a(n4,n8,4),a(n5,n6,2),a(n6,n8,3), a(n1,n7,8),a(n8,n7,6),a(n5,n1,1),a(n2,n5,9),a(n3,n6,7),a(n5,n7,4) a(n9,n7,3),a(n8,n9,4),a(n5,n8,2). Dove n1 è il nome del nodo , 2 la distanza, ecc. Trovare il numero di percorsi diversi che dal nodo 2 terminano nel nodo 9, passando una sola volta per tutti i nodi. I tratti si possono percorrere in entrambe le direzioni (grafo non orientato). Fornire la lista L1 di quello più breve, e L2 di quello più lungo. Disegnare il grafo per maggiore chiarezza. Descrivere e discutere l’algoritmo proposto, rappresentandolo con un flow chart o con un programma in C. Quiz di programmazione (medio) Dato il frammento di programma in C (il linguaggio adottato in tutti i corsi degli indirizzi di Informatica; all’Omar è insegnato dal professor Sergio Conti in quarta classe) main() int n,i,j,a=0,b=0; printf(“Inserisci un numero intero “); scanf(“%d”,&n); if (n < 0) n=-n; i = j = n; while (i > 0) { a + = 1; i --; } do { b + =1; j --; } while (j >0); printf(“a = %d b = %d\n”,a,b); } Cosa succede all’esecuzione, se viene inserito n = 100? E se viene inserito 0? Le risposte sul prossimo numero della nostra rubrica. Buon divertimento! Marchiori e Pireddu: due Italiani per il regalo di Natale di Google IDG News Service (19/11/2011), Philip Willian Il professor Massimo Marchiori dell’università di Padova, con i fondi donati dall’imprenditore sardo Mariano Pireddu, sta realizzando Volunia, uno nuovo strumento che arricchisce la dotazione di Google. Volunia opera in 12 lingue ed è un motore di ricerca di nuova concezione che si affianca a quello normale di Google. Entra in funzione per Natale. Google: la storia online New York Times (20/11/2011) L’istituto culturale di Google sta digitalizzando reperti storici per renderli disponibili gratuitamente via Internet. Il direttore dell’istituto Steve Crossan ritiene l’opera utile per diffondere la cultura, preservare i suoi oggetti e promuovere eventi culturali. Fra le presenze si segnalano i rotoli del Mar Morto, documenti del Museo dell’olocausto (Yad Vashem) e la collaborazione con la fondazione Nelson Mandela.