Проект Euler #3 вне целочисленного диапазона Java

Код должен вернуть наибольшее простое число. Подробнее о задаче здесь: https://projecteuler.net/problem=3

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;
    }

Я решил сделать параметр checkFactors() двойным, потому что пытался проверить, почему мой код не работает должным образом.

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

работает и возвращает "29".

Тем не мение, System.out.println(checkFactors(600851475143));не работает,

Msgstr "600851475143 типа int вне диапазона".

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

компилируется, но через пару секунд выдает исключение ArithmeticException.

3 ответа

Решение

600851475143 of type int is out of range

  • Это число больше, чем int можно хранить. Прикрепление .0 в число преобразует число в double который может представлять это число
  • Вместо .0 ты можешь сделать checkFactors(600851475143d) которые обеспечивают число двойное, а не целое число

Попробуйте вернуть свой параметр обратно в long и сделать письмо L после вашего большого числа, как это 600851475143LЯ думаю это сработает

Используйте long как тип данных для na, а также bigPrimeFactor. Значения слишком велики для хранения в переменной int.

Другие вопросы по тегам