Witam,
Potrzebuję dla spraw związanych z kryptografią, wyszukać dużych liczb pierwszych, poczytałem o klasie BigInteger, jednakże, obliczenia te są dość czasochłonne i w efekcie dostaję błędy o przekroczeniu pamięci. Jak można zoptymalizować ten kod?
package logika;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
public class LiczbyPierwsze {
/**
* @param args
*/
List<BigInteger> lista;
public void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello");
lista = new ArrayList<BigInteger>();
BigInteger n = new BigInteger("1208925819614629174706175");
BigInteger m = new BigInteger("1");
while (m.compareTo(n) < 0) {
if (m.isProbablePrime(20)) {
lista.add(m);
}
m = m.add(BigInteger.ONE);
}
}
public List<BigInteger> getLista() {
return lista;
}
}
Chciałbym, by to były dość dobre podwaliny pod przyszłą rozbudowę, czyli wyszukanie, na ile dana liczba z tego przedziału (liczba 80 bitowa) sposobów może być wynikiem mnożenia różnych liczb pierwszych, by określić przedziały gdzie jest najwyższy poziom "bezpieczeństwa".