gente é o seguinte! eu executei o programa várias vezes mais quando o valor é muito grande no caso 600851475143 o programa fica num run infinito!, alguem sabe como posso almentar a velocidade do calculo, assim vou ter de esperar horas por um resultado e o java é conhecido como uma linguagem eficiênte em questão de velocidade.ta ai o programa(fatora e retorna os números inteiros):
public static void main(String[]args){
BigInteger x=new BigInteger("600851475143");//valor a fatorar
int z=0;
String values="";
for(BigInteger i=new BigInteger("1");i.compareTo(x)<=0;i=i.add(BigInteger.ONE)){//gera valores de 1 ao x
if((x.remainder(i)).compareTo(BigInteger.ZERO)==0)if(primos(i)!=0)values+=i+",";//encontra divisor real, se o divisor é primo adiciona a values
}
System.out.println("valores: "+values);
}
//verifica se é primo ,se primo retorna 1 se não 0
public static int primos(BigInteger x){
int z=0,res=0;
for(BigInteger i=new BigInteger("1");i.compareTo(x)<=0;i=i.add(BigInteger.ONE))if((x.remainder(i)).compareTo(BigInteger.ZERO)==0)z++;//adiciona o numero de divisores perfeitos para x
if (z==2)res=1;//se é divisivel por apenas 2 números(é primo:1 e ele mesmo)retorna seu valor
return res;
}
