2

Project Euler #7 に取り組んでいますが、プログラムが機能しない理由がわかりません。問題は次のとおりです。

最初の 6 つの素数 (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であると言います

4

1 に答える 1

4

あなたのコードは、素数のいくつかの完全な正方形も素数であると誤って信じています。特に、あなたのisPrime(25)返品true.

これは、修正を理解するのに十分なはずです (わかりました、もう 1 つのヒント: 必要なのは 1 つの文字を追加することだけです)。

于 2013-08-08T16:11:32.980 に答える