Java: no se puede hacer que ProjectEuler 3 funcione para un número muy grande (600851475143)

Resolución
Resulta que hay (probablemente) "nada malo" con el código en sí; Es simplemente ineficiente. Si mis cálculos son correctos, si los dejo funcionando, se realizarán antes del viernes 14 de octubre de 2011. ¡Te lo haré saber!

Advertencia esto puede contener spoilers si está tratando de resolver el Proyecto Euler # 3.

El problema dice esto:

os factores primos de 13195 son 5, 7, 13 y 29.

Cuál es el factor primo más grande del número 600851475143?

Aquí está mi intento de resolverlo. Estoy comenzando con Java y la programación en general, y sé que esta no es la solución más agradable o más 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);
    }
}

Cuandonumber se establece en 13195, el programa funciona bien, produciendo el resultado [29, 13, 7, 5] como debería

Por qué esto no funciona para valores más grandes denumber?

Muy relacionado (pero no engañado): Mensaje de error "Número entero demasiado grande" para 600851475143

Respuestas a la pregunta(4)

Su respuesta a la pregunta