我是 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
按这个数字...(希望这不会破坏乐趣)
关于java - for循环之外的语句不会被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21636647/