Proyecto Euler # 3 fuera del rango entero java [duplicado]

Esta pregunta ya tiene una respuesta aquí:

El literal xyz de tipo int está fuera de rango 5 respuestas

Se supone que el código devolverá el mayor número primo. Más sobre la tarea aquí:https: //projecteuler.net/problem=

int checkFactors(double na) {

        long n = (long) na;
        int biggestPrimeFactor = 0;
        for (int i = 1; i < n; i++)
            if (n % i == 0 && isPrimFaktor(i) && i > biggestPrimeFactor)
                biggestPrimeFactor = i;

        return biggestPrimeFactor;
    }

boolean isPrimeFactor(int n) {

        int length= 0;
        for (int i = n; i > 0; i--)
            if (n % i == 0)
                length++;

        if (length== 2)
            return true;
        return false;
    }

Decidí duplicar el parámetro de checkFactors () porque intenté probar por qué mi código no funcionaba correctamente.

System.out.println(checkFactors(13195));

works y devuelve "29".

Sin embargo,System.out.println(checkFactors(600851475143)); No funciona

"600851475143 de tipo int está fuera de rango".

System.out.println(checkFactors(600851475143.0));

compila, pero después de un par de segundos me da una ArithmeticException.

Respuestas a la pregunta(3)

Su respuesta a la pregunta