Olá amigos,
Segue o código que retorna uma lista com todos os números primos de 3 até n. É um algoritmo conhecido como crivo de eratostenes, para gerar primos.
/************************************************/
List<Integer> crivo_eratostenes(int n){
List<Integer> primos = new LinkedList<Integer>();
int [] v = new int[(n-1)/2 + 1];// a posição 0 não usa.
int T,P = 3;
for( int j=1;j<v.length; j++)
v[j] = 1;
int saida = 0;
while(saida == 0){
if((P*P) > n){
for( int j=1;j<v.length; j++)
if(v[j]== 1)primos.add(2*j +1);
saida = -1;
}
else if(v[(P -1)/2]== 0)P=P + 2;
else{
T = P*P;
while(T <= n){
v[(T-1)/2] = 0;
T = T + 2*P;
}
P = P+2;
}
}
return primos;
}
/************************************************/
Então, estou tentando fazer a função acima funcionar com BigInteger ao envés de int. Mas, não estou conseguindo. Preciso dela para uma aplicação com algoritmos de criptografia em que quero trabalhar com números enormes!!!
Alguem poderia fazer isso por mim?
Deu pra entender qual é a minha dúvida?
Um dos obstáculos que encontrei, foi como manipular vetores e listas de BigInteger.
Obrigado,
David