Pessoal! Bom dia! Estou criando um programinha pra calcular os divisores de um número… O problema é que, usando long, int… ele faz em um determinado tempo… e quando converto pra bigDecimal ele não atende da mesma forma… Vou mostrar onde ele diferencia nos dos exemplos. Alguém pode me dar uma dica onde está o erro. Ou a conversão está certa? Obrigado!
Usando Long.
//Detalhe das variáveis… nesse caso… “b” é o valor de entrada usando Scanner… Nesse caso long b = scanner.nextLong();
“y” é um forma de reduzir o numero até um ponto que possa agilizar em questão do tempo…
“n” é um outro redutor de tempo…
long n =y;
for (long q=n; q>0; q–){
if (q == y) {
n =y;
}
else if (q % 2 == 0) {
n -= 2;
} else
n -= 4;
while (b%n==0){
q=(b/n);
System.out.println("Numero encontrado:-->" + "-->B" + (b/n) + "-->N" + n + "-->q " + q );
break;
Convert bigDecimal.
BigDecimal l2 = new BigDecimal(1);
n=y;
for(BigDecimal qq = y; qq.compareTo(BigDecimal.ZERO)>0; qq = qq.subtract(l2) ){
if (qq == y) {
n= y;
} else if (qq.remainder(n1).compareTo(BigDecimal.ZERO)==0) { //n1 ==2;
n = n.subtract(n2); /// n2 == 2;
} else {
n = n.subtract(n4); // n4 == 4;
}
while ( b.remainder(n).compareTo(BigDecimal.ZERO)==0){
qq=(b.divideToIntegralValue(n));
System.out.println("Numero encontrado:-->qq" + (b.divideToIntegralValue(n)) + "-->QQQ" + qq + "-->N#" +n);
break;
}
}
No primeiro Exemplo ele calcula esses dados em :
113715607991 * 43 = 4889771143613
Numero encontrado:–>-->B43–>Y113715607991–>q 43–>
CONSTRUÍDO COM SUCESSO (tempo total: 4 minutos 53 segundos)
Em bigDecimal no exemplo ele demora… Os dados antes de entrar no while são os mesmos… já verifiquei… Só que não faz no mesmo tempo… na vdd em big… não deixo nem concluir… passa dos 30 min ou mas…