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.