Decifrare RSA Di Cristiano Armellini, [email protected] Algoritmi di fattorizzazione veloce Generare una lista di numeri primi in Java ECCO UN PROGRAMMA CHE GENERA UNA LISTA (ANCHE INFINITA) DI NUMERI PRIMI USANDO LE POTENZA DEL JAVA package primi3; import java.math.BigDecimal; import java.math.BigInteger; import java.math.*; public class Main { public static void main(String[] args) { float j = 1; BigInteger primo = new BigInteger("900"); while(j<= 10000){ primo = primo.nextProbablePrime(); System.out.print(primo); System.out.println("--"); j =j+1; } } } I numeri Repunit (alla ricerca dei Repunit primi) R(n) = numero repunit R(n) = (10^n-1)/9 R(n) primo => n primo n primo =\> R(n) primo ---CODICE IN PARI/GP {repunit(b) =local(R); i = 2; while (i <= b, R = (10^i-1)/9; if(isprime(R)==1, print(i); print(R); print("-------")); i = nextprime(i+1)); } {repunit2(b) =local(R); i = 3; while (i <= b, R = (10^i-1)/9; if(isprime(R)==1, print(i); print(R); print("-------"); i = i+2); } ---- CODICE IN JAVA CON LIBRERIA BIG NUMBERS import java.math.BigDecimal; import java.math.BigInteger; import java.math.*; public class Main { public static void main(String[] args) { int j = 3; long max = 1000; BigInteger R = new BigInteger("1"); BigInteger uno = new BigInteger("1"); BigInteger base = new BigInteger("10"); BigInteger base1 = new BigInteger("9"); while(j<= max){ R = (base.pow(j)); R = R.subtract(uno); R = R.divide(base1); if( R.isProbablePrime(1000)) { System.out.println(R); System.out.println(j); System.out.println("------"); } j = j+2; } } Prova grafica di alcune proprietà dei numeri primi Di Cristiano Armellini, [email protected] Le prove grafiche non sono vere prove matematiche ma rappresentano solo un metodo per verificare una congettura o almeno per capire se ci sono i presupposti numerici affinché essa sia probabilmente vera. Nei casi che seguono numero dei numeri primi minori uguali a x (valore approssimato). Per una stima più precisa abbiamo Ln = log = logaritmo naturale ovvero in base x. Pi(x)= stima del numero del numeri dei primi < x =x/ln(x) Tra Se e c’è sempre almeno un numero primo (con . Legendre) allora basta tracciare il grafico di y = (x+1)^2/ln[(x+1)^2]-x^2/ln(x^2) . E’ evidente che y > 0 sempre Tra x e 2x c’è sempre un numero primo Anche qui basta tracciare il grafico e verificare che y > 0 Y = 2x/ln(2x)-x/ln(x) Dato che poi se k è un qualunque intero k > 1 allora ci sono k numeri naturali consecutivi nessuno dei quali è primo (k+1)!+2, (k+1)!+3, ….(k+1)!+(k+1) allora possono esistere nella successione dei primi due elementi consecutivi a distanza arbitrariamente grande.