java - 寻找第 10001 个质数

标签 java

我正在研究 Project Euler #7 并且编写了代码:

public class Seven {

    public static void main(String[] args) {

        int i = 0;
        int c = 1;

        while (c <= 10001) {

            if (squareRootIsPrime(i)) {
                c++;
            }

            i++;

        }

        System.out.println(Math.sqrt(i));
    }

    public static boolean squareRootIsPrime (int n) {

        int x = 0;

        for (int d = 1; d <= n; d++) {
            if (n % d == 0) {x += 1;}
        }

        if (x == 3) {
            return true;
        } else {
            return false;
        }

    }

}

因为有 3 个因数的数的平方根是素数。 到目前为止,我的代码看起来是正确的,但是 Eclipse 不会打印任何内容并终止程序,那么我的代码有什么问题吗?

最佳答案

第 10001 个素数的平方略低于 110 亿。 int 可以容纳的最大值刚刚超过 20 亿。因此变量i在到达第10001个质数的平方之前就会溢出。因为发生这种情况,您将永远看不到第 10001 个素数。

理论上,如果您将变量i 和参数n 的类型更改为long,这就会起作用。但如果您这样做,您将留下必须计算大约 60 quintillion % 运算的代码(即带有 19 个零的 6)。除非你有一台速度极快的计算机,否则这在你的一生中都不会完成。

您可能需要考虑可以使用哪些其他算法。

关于java - 寻找第 10001 个质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427448/

相关文章:

java - SSL socket php代码需要转换为Java

java - 变量定义中带有 findViewById 的 NullPointerException

java - 如何使用Java Midi STOP

java - 开发代码时如何模拟防火墙和代理?

java - Java 中有 ImmutableBitSet 吗?

java - 线程启动方法在运行返回之前返回

java - Jar 位于类路径中但拒绝工作

java - Spring项目添加 "spring-boot-starter-data-jpa"依赖时出错

java - 服务器日志的正则表达式模式

java - 如果我的独立 java 进程将消耗所有堆内存,会发生什么情况?