我是Java的新手。我找到了一个名为project eulder的网站,正在练习一个问题。 我不明白为什么下面的程序没有显示任何东西,只是当我把System.out.println(max);进入for循环它可以工作,但显示所有素数,包括最大的。我只会展示最大的素数?
public class LargestPrimeFactor {
public static void main(String[] args) {
long x = 600851475143L;
int max = 0;
for (int i = 1; i <= x; i++) {
if (x % i == 0)
if (isPrime(i))
max = i;
}
System.out.println(max);
}
public static boolean isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
return true;
}
}
答案 0 :(得分:3)
您编写了一个无限循环:600851475143L
大于int
中可存储的最大值,因此i <= x
始终为true
。
将i
和所有其他相关变量更改为long
可能会解决此问题,但您仍需要重新考虑您的算法。检查600851475143数字是否为素数只需要太长时间。
提示:一旦找到一个除以x
的数字,就可以将x
除以该数字......(希望这不会破坏乐趣)