-4

プロジェクトオイラーの問題を始めたばかりで、10番目の問題に取り組んでいます。10 未満の素数の合計は 2 + 3 + 5 + 7 = 17 です。200 万未満のすべての素数の合計を求めます。

私のコードは次のとおりです。

public class SummationOfPrimes {
    public static void main(String[] args) {
        long sum = 2;
        for (int i = 2; i < 2000000; i++) {
            if (primeOrNot(i)) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
    static Boolean primeOrNot(long input) {
        for (int i = 2; i < Math.sqrt(input); i++) {
            if (input % i == 0) {
                return false;
            }
        }
        return true;
    }
}

私は間違った答えを得ています: 143042032118.

4

2 に答える 2

3

ところで、あなたの解がどれくらい離れているかについての考えを持っていることは常に役に立ちます。

答えが近い場合 (そして私はそうだと思います)、すぐにあなたの素数性テストに焦点を当てますが、これは正しくありません。4、9、...、49 などの素二乗数を正しくテストしていません。平方根を含む必要があります(整数への切り捨ては許容されます)。

書く

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

代わりは。

また、ループの開始値と合計の初期値にも問題があります (Jean-Baptiste Yunès に感謝します):現在持っているものの代わりにlong sum = 0;または) を書きます。for (int i = 3...

于 2013-06-26T13:01:12.277 に答える
2

2 つのプログラミング エラー: 最初に、あなたは で始めますがi=2、あなたの合計はすでにです。第二に、平方根までテストしません。sum=2sum=0i=3

于 2013-06-26T13:34:16.730 に答える