2

我是 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;
    }
}
4

1 回答 1

3

您已经编写了一个无限循环:600851475143L大于可以存储在 中的最大值int,因此i <= x将始终为true

更改i和所有其他相关变量long可能会解决此问题,但您仍然需要重新考虑您的算法。检查 600851475143 数字是否是素数只会花费太长时间。

提示:一旦你找到一个除以 的数x,你就可以除以x那个数...(希望这不会破坏乐趣)

于 2014-02-07T20:02:37.890 回答