Ricerca Matematica sui Numeri primi
Upcoming SlideShare
Loading in...5
×
 

Ricerca Matematica sui Numeri primi

on

  • 1,635 views

Nuove idee matematiche sui numeri

Nuove idee matematiche sui numeri

Statistics

Views

Total Views
1,635
Views on SlideShare
1,629
Embed Views
6

Actions

Likes
0
Downloads
6
Comments
0

2 Embeds 6

http://armellinicristiano.blogspot.com 3
http://www.docshut.com 3

Accessibility

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Ricerca Matematica sui Numeri primi Ricerca Matematica sui Numeri primi Document Transcript

  • Fattorizzare i numeri interi (applicazioni all’RSA) Ci sono molti algoritmi efficienti per fattorizzare numeri interi e molti sono i testi dove è possibile trovare una completa trattazione sull'argomento, Qui vogliamo proporre dei sistemi (in parte abbastanza originali e forse relativamente veloci ma senza nessuna pretesa da parte nostra) per cercare di trovare i fattori di un numero intero con metodi algebrici e facilmente implementabili in un moderno calcolatore. A breve verranno pubblicati dei programmi in Visual Basic .Net con i quali sarà possibile fare delle simulazioni numeriche. La cosa migliore per verificare formule e algoritmi è usare un software come il Mathematica o il C/C++). L'idea è comunque quella di trovare dei limiti entro cui cercare con maggiori probabilità le soluzioni. Nella ricerca delle soluzioni prendiamo in esame solo valori interi positivi benché in linea di principio potremmo considerare anche i negativi dal momento che 9 = 3*3 = (-3)*(-3). Facendo girare tutti gli algoritmi in parallelo aumenta la probabilità di trovare soluzioni in tempi rapidi. Considerazione preliminare (algoritmo 0) Dato un numero p da fattorizzare di n cifre è facile provare che almeno un fattore deve deve essere dell'ordine di cioè deve avere almeno int(n/2) cifre. Questa semplice osservazione già ci indica dei limiti, degli intervalli in cui agire per la ricerca dei fattori. Per la ricerca del primo fattore = W (iniettore di potenza) ove int(x) è la parte intera di x. Inoltre quando si sommano due fattori di p l'ordine di grandezza della somma dei fattori è sempre quello del fattore maggiore. Considerare W ci è particolarmente utile quando trattiamo di grandi dimensioni perchè come vedremo meglio con gli altri algoritmi ci può aiutare a trovare dei limiti per i fattori da ricercare. #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double x, p; long i = 0; int cifre; cout << "inserisci il numero di cifre del numero intero"; 1
  • cin >> cifre; cout <<" inserisci il numero da fattorizzare"; cin >> p; x = pow(10, int(cifre/2)-1 ); do{ x = x + 1; i = i + 1; } while(int(p/x) != (p/x)); cout << "un fattore e' " << x; cout <<" passi di elaborazione: " << i; cin >> "---------"; return 0; } Primo algoritmo (in generale non è detto che ci siano solo due fattori come nell'RSA ma il procedimento di fattorizzazione può essere ripetuto per ognuno dei due fattori trovati finché non si arriva a fattori che hanno decomposizione banale cioè che sono primi) dove OR sta ad indicare che la relazione vale per una radice o per entrambe 2
  • tutti i numeri interi positivi (ove la ricerca può essere fatta in modo sequenziale oppure random) Attenzione: per P molto grande A(p) cioè il numero dei primi minori di P è approssimativamente p/log(p) #include <stdio.h> #include <iostream.h> #include <math.h> int main(int argc, char *argv[]) { long double x, p; long i, j; j = 0; cout << "inserisci il numero da fattorizzare "; cin >> p; for( i = int(sqrt(p)); i <= int(p/2); i++) { j = j +1; if(int(p/i) == (p/i)) { cout << "fattore: " << i << "n"; cout << "passi: " << j << "n"; } } cin >> "-----------------"; return 0; } 3
  • lo stesso algoritmo può essere implementato in Visual Basic .Net usando per la ricerca dei fattori un generatore di numeri casuali: la ricerca si rileva molto più veloce: Module Module1 Sub Main() Dim p As Decimal Dim generator As New Random Dim a As Decimal Dim i As Integer i=0 Console.WriteLine("inserisci il numero da fattorizzare") p = Console.ReadLine() Do a = generator.Next(2, Int(Math.Sqrt(p))) i=i+1 Loop While ((p / a) <> Int(p / a)) Console.Write("fattore: ") Console.Write(a) Console.Write("passi: ") Console.Write(i) Console.ReadLine() End Sub End Module 4
  • Secondo algoritmo tentiamo di velocizzare la ricerca delle soluzioni con l'iniettore di potenza W precedentemente introdotto dove OR sta ad indicare che la relazione vale per una radice o per entrambe, da questa diseguaglianza mi trovo un limite massimo per s cioè per X2 (radice con il -) oppure vale l'opposto per X1 (radice con il +) (punto nodale utile come punto di partenza nelle due opposte direzioni) S intero positivo (la ricerca di S può essere fatta in modo sequenziale oppure random) Nel caso che si sappia che si sta trattando di un problema RSA i due fattori essendo primi hanno come somma un numero pari così che i casi da esaminare si dimezzano. 5
  • In ogni caso è un quadrato perfetto e i metodi di ricerca devono tener conto di questo equivale alla ben nota relazione #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double p, x, y, s; long i; cout << "inserisci il numero da fattorizzare "; cin >> p; s = 2* int(sqrt(p)); i = 0; do { x = (s + sqrt(pow(s,2)-4*p))/2; y = (s - sqrt(pow(s,2)-4*p))/2; s = s+1; i = i+1; }while((int(p/x) != (p/x)) || (int(p/y) != (p/y))) ; // si può mettere && (and) al posto di || (OR) ma una delle due soluzioni trovate potrebbe non essere intera cout << "un fattore e' " << x << "n"; cout << "un fattore e' " << y << "n"; cout << "passi: " << i; cin >> "--------------------"; return 0; } 6
  • VARIANTE #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { float a, x, y, p; long double i; cout << "inserisci il numero da fattorizzare "; cin >> p; a = 0; i = 0; do{ x = sqrt( (a+2*p+sqrt(pow(a,2)+4*a*p))/2); y = sqrt( (a+2*p-sqrt(pow(a,2)+4*a*p))/2); a = a+1; i = i+1; } while ((int(p/x) != (p/x)) || (int(p/y) != (p/y))) ; // si può mettere && (and) al posto di || (OR) ma una cout << "fattore: " << x << "n"; // delle due soluzioni trovate potrebbe non essere intera cout << "fattore: " << y << "n"; cout << "passi: " <<i << "n"; cin >> " -----"; return 0; } 7
  • Terzo algoritmo dove m è intero allora da cui si può partire direttamente da m per trovare le soluzioni (possiamo considerare anche le soluzioni negative di X1, X2 quelle con il segno - tuttavia poi bisogna mettere il valore assoluto abs(X1), abs(X2)) è un quadrato perfetto e i metodi di ricerca devono tener conto di questo tentiamo di velocizzare la ricerca delle soluzioni con l'iniettore di potenza W precedentemente introdotto 8
  • dove OR sta ad indicare che la relazione vale per un radice o per entrambe (da questa disuguaglianza mi trovo una condizione per m) cioè per X1 oppure per X2(m comunque deve essere positivo) #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double m, x, y, p; long i; cout << "inserisci il numero da fattorizzare "; cin >> p; m = 0; i = 0; do{ x = (m + sqrt(pow(m, 2) + 4*p))/2; y = (-m + sqrt(pow(m, 2) + 4*p))/2; m = m+1; i = i+1; } while ( (int(p/x) != (p/x)) || (int(p/y) != (p/y))); // si può mettere && (and) al posto di || (OR) ma una cout << "fattore: " << x << "n"; // delle due soluzioni trovate potrebbe non essere intera cout << "fattore: " << y << "n"; cout << "passi: " <<i << "n"; cin >> " -----"; return 0; } 9
  • Quarto algoritmo (possiamo considerare anche la soluzione negativa quella con segno - , però poi occorre considerarne il suo valore assoluto) tentiamo di velocizzare la ricerca delle soluzioni con l'iniettore di potenza W precedentemente introdotto (dove OR sta ad indicare che la relazione vale per una radice o per entrambe, da questa diseguaglianza mi trovo un condizione per a e/o per b cioè (radice con il +) oppure vale l'opposto (radice con il -) (punto nodale) dipende dalla soluzione che troviamo per prima #include <stdio.h> #include <math.h> #include <iostream.h> 10
  • int main(int argc, char *argv[]) { long double x, y, p; long a; long i = 0; cout<< "inserisci il numero da fattorizzare "; cin >> p; a = int(sqrt(p)); a = a+1; do { x = a + sqrt(pow(a,2) -p); y = a - sqrt(pow(a,2) - p); a = a+1; i = i+1; } while( (int(p/x)!=(p/x)) ||(int(p/y) != p/y)) ; // si può mettere && (and) al posto di || (OR) ma una delle due soluzioni trovate potrebbe non essere intera cout << "fattore: " << x << "n"; cout << "fattore: " << y << "n"; cout << "passaggi: " << i; cin >> "-------------"; return 0; } #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double x, p; long b; long i = 0; 11
  • cout<< "inserisci il numero da fattorizzare "; cin >> p; b = int(sqrt(p)); b = b+1; do { x = - b + sqrt(pow(b,2) + p); b = b+1; i = i+1; } while((int(p/x)!=(p/x))); cout << "fattore: " << x << "n"; cout << "fattore: " << y << "n"; cout << "passaggi: " << i; cin >> "-------------"; return 0; } Quinto algoritmo Se allora sostituendo le variabili ottengo che quindi applichiamo anche qui la condizione abbiamo che nel caso opposto cioè che abbiamo che . dove a > 0. Come negli altri casi si sarebbe potuto considerare per X1 e X2 anche le soluzioni negative , quello con segno - poi si sarebbe dovuto calcolare il loro valore assoluto. 12
  • #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double x, y, p; long a; long i = 0; cout<< "inserisci il numero da fattorizzare "; cin >> p; a = 0; a = a+1; do { x = (-a+sqrt(pow(a,2)+4*p))/2; y = (a+sqrt(pow(a,2)+4*p))/2; a = a+1; i = i+1; } while( (int(p/x)!=(p/x)) ||(int(p/y) != p/y)) ; // si può mettere && (and) al posto di || (OR) ma una delle due soluzioni trovate potrebbe non essere intera cout << "fattore: " << x << "n"; cout << "fattore: " << y << "n"; cout << "passaggi: " << i; cin >> "-------------"; return 0; } Sesto algoritmo Partiamo da un ben nota relazione algebrica sempre vera: 13
  • quindi arriviamo a quindi le soluzioni sono #include <stdio.h> #include <math.h> #include <iostream.h> int main(int argc, char *argv[]) { long double x, y, p; long int i, a, c; a = 0; i = 0; cout << "inserisci numero "; cin >> p; do{ x = sqrt(p+a+sqrt(pow(a,2)+2*p*a)); y = sqrt(p+a-sqrt(pow(a,2)+2*p*a)); a = a+1; // qui è meglio mettere a = a+ 1/2 se non è un problema RSA; i = i +1; }while( (int(p/y) != (p/y)) || (int(p/x) != (p/x)) ) ; // si può mettere && (and) al posto di || (OR) ma cout << "fattore: " << x << "n"; // una delle duesoluzioni trovate potrebbe non essere intera cout << "fattore: " << y << "n"; cout << "passi: " << i; cin >> c; 14
  • return 0; } Fattorizzazione con il teorema di Bezout Il famoso teorema di Bezout ci può aiutare a trovare i fattori di un problema RSA. Sia p = ap dal teorema di Bezout sappiamo che se d=MCD(a,b) esistono u, v interi tali che d = ua + bv. Ora dato che d=MCD(a,b) = 1 abbiamo che 1= au + bv. Da queste considerazioni esplicintando a e sapendo che p = ab troviamo: ove uv = k < 0 mentre v può essere v > 0, v < 0 in pratica il programma prima trova i possibili valori di k poi cerca i valori di v: #include <stdio.h> #include <iostream.h> #include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { double x, y, p, k, v; double a, b; int j, i; k = 0; v = 0; 15
  • cout << "inserisci un numero da fattorizzare "; cin >> p; do { k = k-1; i = i+1; a = 1-sqrt(1-4*k*p); b = 1+sqrt(1-4*k*p); } while (((a) != int(a)) && ((b) != int(b))) ; do { v = v-1; i = i+1; x = a/(2* v); y = b/(2* v); } while (((p/x) != int(p/x)) && ((p/y) != int(p/y))); if ((p/x) == int(p/x)) { cout << "fattore "<< x << "n"; } else if ((p/y) == int(p/y)) { cout << "fattore "<< y << "n"; } cout << "passi " << i; cin >> j; return 0; } 16
  • Fattorizzazione e ricerca operativa Possiamo vedere le cose anche da un altro punto di vista, dal punto di vista della ricerca operativa (programmazione non lineare). Il nostro problema diventa un problema di programmazione non lineare a variabili intere: funzione obiettivo P = X1 X2 variabili: X1, X2 vincoli: X1, X2 >0 e interi e applicare i metodi della ricerca operativa e/o i software già predisposti per questo tipo di problemi Conseguenze Usando un sistema di calcolo parallelo ove ogni algoritmo è fatto girare su un pc abbastanza potente e veloce si potrebbero fattorizzare numeri interi anche molto grandi Teoria dei numeri Come è possibile gestire in un normale calcolatore numeri molto grandi, diciamo numeri interi a 200 cifre ? Vediamo l'algoritmo con un esempio e poi generalizziamo con il formalismo matematico Supponiamo di voler calcolare 321*44 = 14124 17
  • sappiamo che ogni numero intero lo possiamo scrivere nella sua notazione polinomiale: (3X^2 +2*X+1)*(4*X+4) ove X^2 è X elevato alla seconda e ovviamente X = 10 svolgiamo la moltiplicazione tra i polinomi e consideriamo che 12 mod 2 = 2 e che 12-(12 mod 10) = 10 (per i coefficienti del polinomio prodotto usiamo l'aritmetica modulo 10 ovvero se abbiamo coefficienti maggiori o uguali a 10 cioè ad esempio 12 = 10 +2 scriviamo 12 = X+2 per poi continuare a semplificare e a ridurre modulo 10 finché tutti i coefficienti del polinomio sono in base 10) tralasciano i passaggi abbiamo che 1*X^4 + 4* X^3+1*X^2 +2*X+4 cioè 14124 che è la soluzione Osservazione: nel caso si stesse considerando un altro sistema numerico ad esempio il binario il ragionamento non cambierebbe solo bisogna tener conto che si deve considerare l'aritmetica modulo p (p = 10 sistema decimale, p = 2 sistema binario ecc) Il caso della somma è ancora più semplice perché 3*X^2+2*X +1 +4*X +4 = 3*X^2 +6*X +5 cioè 321 + 44 = 365 (anche per la somma se ce ne fosse stato bisogno avremmo dovuto ridurre i coefficienti del polinomio in base l'aritmetica modulo 10) Idem è il caso della differenza tra numeri Questo ci permetterà di programmare un calcolatore per fargli compiere operazioni molto complesse che un normale PC non riuscirebbe a fare. Infatti dall'algebra elementare esistono formule che generalizzano la somma, la differenza la moltiplicazioni e la divisione tra polinomi di qualunque grado 18
  • caso con la virgola: 12,6 +15,4 = Il caso della divisione è un po',più complesso anche se in realtà una divisione non è altro che una serie di sottrazioni come una moltiplicazione non è che una serie di somme... La congettura di Goldbach La seguente trattazione non è la vera dimostrazione della congettura (la congettura non è stata ancora dimostrata) ma solo il tentativo di fare alcuni ragionamenti intorno alla congettura stessa. LA CONGETTURA 19
  • Ogni numero pari maggiore di due è somma al più di due numeri primi non necessariamente diversi tra loro Considero la funzione (phi di Eulero) F(q) di Eulero F(q) mi dà il numero di primi con q minori di q. Se q è primo F(q) = q-1 ma essendo q un primo quindi un numero dispari q-1 è pari. Ora: F(q) = q-1 F(p) = p-1 Per come è fatta F, F(n) è sempre pari (è facile dimostrarlo in base alle proprietà di F per ogni n> 2 e al variare di n F(n) mi mappa l'insieme dei numeri pari, vedi più avanti la def di F(n) come prodotto di differenze di potenze di primi) (per calcolare F(n) deve essere nota la decomposizione di n in fattori (la moltiplicazione di numeri pari è un pari, la differenza di due dispari è un pari , un primo è un dispari e un dispari elevato a qualunque potenza intera è un dispari, quindi F(n) è sempre un numero pari) ogni numero pari 2a è somma di due numeri pari 2a = F(p)+ F(q) (F(p), F(q) al variare di p e q primi mi danno numeri pari) F(p) + F(q) = p-1 + q-1 = p+q-2 che è pari perché somma di due numeri pari p+q-2 = 2a quindi p + q = 2(1+a) domanda: F(p) = p -1 <=> p primo , ora p primo => F(p) = p-1, ma se F(p) = p-1 => p primo ? ! Si e la dimostrazione è per induzione: 20
  • Infatti F(1) = 1. Allora si può assumere q > 1. Se F(q) = q-1 vuol dire che tutti i q-1 numeri da 1 a q-1 sono primi con q, e dunque q non ha divisori tra 1 e q-1, escluso ovviamente 1. Quindi q è primo Ora procediamo per induzione sui numeri pari 1) supponiamo che dato un pari fissato 2a esistono due primi p e q tali che 2a = p +q (il passo zero del procedimento induttivo è banale e quindi non lo riportiamo) 2) dalle considerazioni fatte precedentemente potremmo pensare (non è proprio così !) di aver provato che 2(a+1) si può scrivere come somma di due numeri primi p, q ovviamente differenti da quelli del punto 1) ovvero: 1) assumiamo che 2a = p+q vera, p, q primi 2) 2a = F(p1) + F(q1) q1, p1 primi (un pari è sempre la somma di due pari) 3) 2a = p1 - 1 + q1 - 1 4) 2(a+1) = p1 + q1 vera 5) per induzione 2a = p+q per ogni a (ad ogni a cambieranno p, q) oppure: consideriamo n = pq con p, q primi e diversi da 2 (se uno tra p e q fosse 2 basterebbe dividere n per 2, inolre F(2pq) = F(pq)) . Già sappiano che F(n) è sempre pari. Ora F(n) = F(pq) = F(p)F(q) perchè MCD(p,q) = 1. Ora F(p)F(q) = (p-1)(q-1) = pq-(p+q)+1 quindi F(n) = 2k = pq-(p+q)+1, cioè pq+1-2k = p+q e dato che pq+1 è pari perché pq è dispri pq+1-2k è pari perché differenza di numeri pari, quindi pq+1-2k è un generico numero pari (?!) che è somma di due primi p, e q. 21
  • Nota: non dobbiamo provare che la somma di due primi è un pari (questo è banale perché due primi sono sempre due numeri dispari altrimenti sarebbero divisibili per 2 e la somma di due dispari è sempre un numero pari), infatti p+q = 2b sempre (partendo da p e q noti, 2a = 2p' +1 + 2q' +1 per opportuni p', q' interi ) Osservazioni: - non è vero che ogni numeri pari aumentato di una unità è un numero primo ma è sempre vero che un numero primo diminuito di una unità è un numero pari, quindi esistono infiniti numeri pari (non tutti), che aumentati di una unità danno un numero primo -un numero pari è sempre la somma (o differenza) di due numeri dispari oppure è la somma di due pari; l'insieme dei numeri dispari comprende l'insieme dei numeri primi - l'unico numero primo pari è il 2 (è un primo un po' speciale) - possiamo considerare 1 un numero primo (è un primo un po' particolare) Impostazione geometrica del problema Consideriamo un numeri pari e i un piano cartesiano rappresentiamo tale numero formando con le ascisse e le ordinate un quadrato. Consideriamo la diagonale del quadrato: nella figura le x sono nella diagonale le caselle gialle ottenute dall'intersezione tra i numeri primi delle ascisse (in giallo) e le ordinate (in giallo) minori del numero pari dato. Questo ci suggerisce un metodo iterativo per costruire la tavola dei numeri primi perché a partire dai primi numeri primi diagonale dopo diagonale si trovano i primi successivi. Vediamo meglio questo concetto. 6 5 x 4 X 3 x 2 x 1 x 1 2 3 4 5 6 22
  • a) prendiamo in considerazione tutte le coppie i, j tali che i +j = 2a per un certo a fissato b) prendiamo solo in considerazione quelle coppie tali che MCD (i,j) = 1 e la coppia speciale i=j c) escludiamo le coppie che contengono l'unità.... le rimanenti coppie sono coppie di primi ? No in generale ma se procediamo in modo ricorsivo a partire dal primo numero pari e per ogni pari con questo metodo determiniamo i primi numeri primi minori di quel numero pari nelle successive diagonali possiamo escludere quei casi in cui mcd(i,j)= 1 i+j = 2a ma uno dei due (i o j) non è primo (ovvero per ogni diagonale calcoliamo i primi e ne teniamo in considerazione per le diagonali successive - un po' come il crivello di Erat.) d) con questo metodo costruttivo interattivo possiamo dire che nella diagonale c'è sempre qualche coppia di primi ? In realtà nella diagonale troviamo tutte le possibili coppie i, j taliche i +j = 2a. Le coppie devono essere o coppie di pari o coppie di dispari. Dobbiamo provare che tra le coppie di dispari c'è almeno una coppia di primi. 10 9 no 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 no 1 2 3 4 5 6 7 8 9 10 la diagonale è sempre simmetrica e questo ci permette di procedere più veloci visualizzazione multipla (si possono intravedere interessanti geometrie ?) 23
  • 10 9 no 8 x 7 x x 6 x x 5 x x x 4 x x x 3 x x x x 2 x x x x 1 x x x x no 1 2 3 4 5 6 7 8 9 10 crivello di Eratostene (formulazione grafica: le x sono i primi perché non hanno intersezioni con "gialli") 14 13 x 12 11 x 10 9 8 7 x 6 5 x 4 3 2 x 1 1 2 3 4 5 6 7 24
  • Investire in borsa Non esistono teorie sicure per investire in borsa. Molti matematici ritengono che l'analisi tecnica (tanto cara agli economisti e alle banche) non sia un valido strumento di previsione. Forse hanno ragione, forse no. L'idea è allora quella di proporre (algoritmi un po' strani e fantasiosi) che però potrebbero essere efficaci in molte situazioni Supponiamo di considerare che X sia una variabile casuale. X rappresenta il valore di una certa azione al variare del tempo. Consideriamo i valori di X per circa 30 sedute di borsa consecutive (un mese e mezzo di contrattazioni). Calcoliamo la media e lo scarto quadratico medio di X cioè . Questa può in effetti essere una forzatura ma possiamo accettare l'ipotesi valida. Per giustificarla potremmo dire che in un determinato periodo temporale (periodo che comprende anche le previsioni a breve ovvero periodo totale = periodo dati + periodo previsione) la variabile casuale X assumerà dei valori x1.....xN, con probabilità p1........pN tale che la somma delle probabilità pi sia pari a 1. Utilizziamo il teorema di Chebicev che dice che data una qualunque variabile casuale X vale la seguente relazione: cioè Ove P è la probabilità che la variabile casuale X assuma certi valori in un intervallo di dati. 25
  • Impostiamo il livello di affidabilità al 95% cioè e troviamo K (possiamo fare altre scelte dl tipo 90% o 98%, troveremo valori di k differenti). Più aumentiamo il livello di affidabilità più aumenta anche il range cioè l'intervallo in cui il valore della nostra azione può oscillare per il prossimo mese di contrattazioni. Diminuendo la percentuale si rischia di fare previsioni poco attendibili. Con queste considerazioni stimiamo che il valore della nostra azione oscillerà nel prossimo mese di contrattazioni in un determinato intervallo a < X < b con una certa probabilità. Ovvio che la previsione del valore del titolo deve essere limitata nel tempo in quanto i parametri della variabile casuale andrebbero ricalcolati alla fine di ogni giornata borsistica. Ma tanto per semplificare supponiamo di fare una previsione per un periodo temporale di circa un mese se si potesse stimare la probabilità p che un titolo scenda o salga in un ben determinato periodo (o q la probabilità opposta p+q =1) non sarebbe una idea malvagia considerare la distribuzione di Bernulli e dire che la probabilità che in n sedute di contrattazioni ci siano k rialzi del titolo è: ove p+q = 1, e dove la variabile casuale ha media = np e varianza = npq. Se riusciamo a ben stimare p e q riapplicando il teorema di chebicev possiamo avere delle informazioni in più sul possibile andamento del nostro titolo. Possiamo calcolare p e q supponendo di studiare il titolo per 30 sedute di borsa consecutive p = numero di sedute positive /30, q = numero di sedute negative / 30, la media è facilmente calcolabile Posso considerare un portafoglio finanziario formato da n titoli, impostare un valore C da investire e cercare le quantità che devo acquistare di ogni singolo titolo in modo da massimizzare il mio investimento (problema di ricerca operativa) 26
  • I piani di accumulo del capitale Molte strategie di investimento si basa sui piani di accumulo del capitale. L'idea che voglio proporre è quella di usare la serie geometrica per progettare un piano di accumulo. Di solito i tradizionali piani prevedono un investimento costante, usando la serie aritmetica o quella geometrica possiamo considerare interessanti varianti S = somma da investire n = numero delle sedute di borsa da considerare = periodo di investimento a = valore iniziale da investire (termine ennesimo) ad ogni seduta investirà il termine: a cui impongo dei limiti fissati Se penso che la tendenza si al rialzo una strategia prudente è (se ci fossero delle chiusure in "negativo" la perdita sarebbe limitata) Se penso che la tendenza sia al ribasso una strategia prudente è (al primo "rimbalzo tecnico" si recuperano tutte le perdite) Nel caso delle progressioni aritmetiche: 27
  • il vero problema è come scegliere i parametri in modo da ottimizzare i guadagni e ridurre la perdite supponendo di sapere la "tendenza del mercato". L'argomento merita un approfondimento. Non tutti sono concordi con queste teorie ed esistono comunque pareri discordi Lotto e matematica Non esistono teoria sicure sul gioco del lotto Qui vogliamo presentare un semplice programma in Visual Basic .Net per la generazione di numeri casuali per giocare al Lotto e tentare la fortuna. Chi vende i numeri "fortunati" spesso altro non fa che usare sistemi come questo (sistemi che non garantiscono in nessun caso vincite)Il listato si può modificare per adattarlo anche ad altri linguaggi di programmazione come il C/C++ Module Module1 Sub Main() Dim generator As New Random Dim arr(30) As Integer Dim randomValue As Integer Dim ruota As String Dim i As Integer Console.WriteLine("inserisci la ruota") ruota = Console.ReadLine() Console.WriteLine(ruota) For i = 0 To 4 randomValue = generator.Next(1, 90) arr(i) = randomValue Console.Write(arr(i)) Console.Write("-") Next 28
  • Console.ReadLine() End Sub End Module Modelli matematici per il sudoku 1)Consideriamo un sudoku di qualunque dimensione e per il momento lo scomponiamo in quadrati 3X3 (tre righe e tre colonne) 2) prendiamo dapprima i quadrati che hanno un maggior numeri di dati già inseriti 3) consideriamo uno di questi quadrati x11 x12 x22 x21 x22 x23 x31 x32 x33 4) abbiamo il seguente problema di ricerca operativa a) la somma di tutte le variabili Xij = 1+2+3+4+5+6+7+8+9 = 45 (funzione obiettivo) b) tutte le variabili Xij devono essere diverse tra loro (vincolo) c) tutte le variabili devono essere intere a appartenere all'insieme 1, 2, 3, 4, 5, 6, 7, 8, 9 5) procediamo con gli altri quadrati tenendo conto anche dei risultati già ottenuti nel punto 4) 6) risolto questo problema (si può usare il risolutore delle equazioni di Excel, Open Office o un risolutore di problemi di ricerca operativa come Gams o Lingo) si analizzano tutte le possibili soluzioni trovate (in generale ce può essere più d'una per ogni quadrato) 29
  • 7) si provano le soluzioni nel quadro generale e si escludono quelle che non possono essere accettate sulla base delle regole del sudoku Indice Sommario Fattorizzare i numeri interi (applicazioni all’RSA).............................................................................................1 Considerazione preliminare (algoritmo 0)....................................................................................................1 Primo algoritmo............................................................................................................................................2 Secondo algoritmo........................................................................................................................................5 Terzo algoritmo............................................................................................................................................8 Quarto algoritmo .......................................................................................................................................10 Quinto algoritmo........................................................................................................................................12 Sesto algoritmo...........................................................................................................................................13 Fattorizzazione con il teorema di Bezout....................................................................................................15 Fattorizzazione e ricerca operativa.............................................................................................................17 Conseguenze...............................................................................................................................................17 Teoria dei numeri...........................................................................................................................................17 La congettura di Goldbach ........................................................................................................................................................................19 Impostazione geometrica del problema ....................................................................................................22 Investire in borsa............................................................................................................................................25 I piani di accumulo del capitale......................................................................................................................27 Lotto e matematica........................................................................................................................................28 Modelli matematici per il sudoku...................................................................................................................29 Indice..............................................................................................................................................................30 Per aggiornamenti vedere il sito http://armellini.pbworks.com 30