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.