我是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;
}
}
您已编写了一个无限循环:600851475143L
大于可以存储在中的最大值int
,因此i <= x
将始终为true
。
更改i
和所有其他相关变量long
可以解决此问题,但是您仍然必须重新考虑算法。检查600851475143数字是否为质数将花费太长时间。
提示:一旦找到要除的数,x
就可以除以x
该数字...(希望这不会破坏乐趣)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句