Mensagem de erro "Número inteiro muito grande" para 600851475143

public class Three {
    public static void main(String[] args) {
        Three obj = new Three();
        obj.function(600851475143);
    }

    private Long function(long  i) {
        Stack<Long> stack = new Stack<Long>();

        for (long j = 2; j <= i; j++) {
            if (i % j == 0) {
                stack.push(j);
            }
        }
        return stack.pop();
    }
}

Quando o código acima é executado, produz um erro na linhaobj.function(600851475143);. Por quê?

questionAnswers(8)

yourAnswerToTheQuestion