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

questionAnswers(4)

yourAnswerToTheQuestion