项目Euler#7 Java代码无法正常工作

时间:2013-08-08 16:04:18

标签: java primes

我一直在研究Project Euler#7,并且无法弄清楚为什么我的程序无效。问题如下:

通过列出前六个素数:2,3,5,7,11和13,我们可以看到第6个素数是13。

10 001号素数是多少?

到目前为止,这是我的计划:

public class Euler7 {
public static void main (String[] args) {
    long count = 1;
    long primes = 0;
    while (primes <= 10001) {
        if (isPrime(count)){
            primes++;
            if (primes == 10001) {
                System.out.println(count);
            }
        }

    count++;
    }
}
public static boolean isPrime (long i) {
    if (i <= 1) return false;
    else if (i == 2 || i == 3) return true;
    else if (i % 2 == 0 || i % 3 == 0) return false;
    else {
    for (int n = 3; n < Math.sqrt(i); n+=2) {
        if (i % n == 0) {
            return false;
        }
    }
    return true;
    }
}

}

编辑:要清楚,它返回值104033,但WolframAlpha说第10001个素数是104743

2 个答案:

答案 0 :(得分:4)

您的代码错误地认为素数的一些完整正方形也是素数。特别是,您的isPrime(25)会返回true

这应该足以找出修复方法(好吧,还有一个提示:你需要的只是添加一个字符)。

答案 1 :(得分:2)

您需要使用

for(int n = 3; n <= Math.sqrt(i); n += 2){

现在你的代码接受素数的完美平方作为素数。