该代码应该回馈最大的素数。 有关此任务的更多信息,请访问: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()的参数设为double,因为我试图测试为什么我的代码无法正常工作。
System.out.println(checkFactors(13195));
工作并返回“29”。
然而,System.out.println(checkFactors(600851475143));
不起作用,
“int类型的600851475143超出范围”。
System.out.println(checkFactors(600851475143.0));
确实编译但在几秒钟之后给我一个ArithmeticException。
答案 0 :(得分:2)
600851475143 of type int is out of range
int
可存储的数字。在号码上附加.0
会将号码转换为double
,其中可以代表该号码.0
你可以做checkFactors(600851475143d)
,确保数字是双倍而不是int 答案 1 :(得分:1)
使用long作为na和bigPrimeFactor的数据类型。这些值太大,无法存储在int变量中。
答案 2 :(得分:1)
尝试将您的参数恢复为long
并在您的大号L
之后填写600851475143L
字母,我认为它会起作用