Java - Não é possível fazer o ProjectEuler 3 funcionar com um número muito grande (600851475143)
Resolução:
Acontece que há (provavelmente) "nada de errado" com o próprio código; é apenas ineficiente. Se minha matemática estiver correta, se eu deixá-la em execução, isso será feito até sexta-feira, 14 de outubro de 2011. Avisarei!
Aviso: isso pode conter spoilers se você estiver tentando resolver o Projeto Euler # 3.
O problema diz o seguinte:
Os fatores primos de 13195 são 5, 7, 13 e 29.
Qual é o maior fator primo do número 600851475143?
Aqui está a minha tentativa de resolvê-lo. Estou apenas começando com Java e programação em geral, e sei que essa não é a solução mais agradável ou mais eficiente.
import java.util.ArrayList;
public class Improved {
public static void main(String[] args) {
long number = 600851475143L;
// long number = 13195L;
long check = number - 1;
boolean prime = true;
ArrayList<Number> allPrimes = new ArrayList<Number>();
do {
for (long i = check - 1; i > 2; i--) {
if (check % i == 0) {
prime = false;
}
}
if (prime == true && number % check == 0) {
allPrimes.add(check);
}
prime = true;
check--;
} while (check > 2);
System.out.println(allPrimes);
}
}
Quandonumber
está configurado para13195, o programa funciona muito bem, produzindo o resultado[29, 13, 7, 5] Como deveria.
Por que isso não funciona para valores maiores denumber
?
Intimamente relacionado (mas não burro):Mensagem de erro "Número inteiro muito grande" para 600851475143