Проект 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.