【发布时间】:2014-02-07 19:55:59
【问题描述】:
我是 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;
}
}
【问题讨论】:
-
你应该学会使用调试器。如果做不到这一点,你应该写出你的算法所采取的每一步。
-
它被称为
LargestPrimeFactor,而不是AllThePrimeFactors -
你将溢出循环中的 int。
-
你知道,如果你从顶部开始往下走,你会发现只最大,而不必先检查它下面的所有万亿个数字。
-
从逻辑上讲,您的代码是正确的(在 isPrime(i) 之后放置一个 System.out.println - 请添加更多大括号 - 您会看到您的代码正常工作)。您只是没有给它足够的时间来处理 600851475143 值。这意味着您可能需要重新考虑您的方法。
标签: java loops for-loop unreachable-code