-4

オイラー問題No. 10 は、200 万未満のすべての素数の合計を求めます。sqrt関数と関数を使用すると、異なる結果が得られpowます。を使用sqrtすると正しい答えが得られ、さらに pow 関数を使用すると時間がかかります。これが私のコードです。

for(sum=0,i=3;i<=2000000;i+=2)
{
    for(j=3;j<=sqrt(i);j++)
        if(i%j==0)
            break;
    if(j>sqrt(i))
        sum+=i;
}
sum+=2;
std::cout << "\nSum = " << sum;
4

3 に答える 3

1

あなたの問題を私のコンピューターで再現することはできませんが、あなたのテストdoubleは非常に危険なものです。iが素数の 2 乗である場合、 の高精度に依存sqrtpowており、正しい結果が得られます。あなたのシステムでは、そのような四角形の 1 つ以上にわずかな丸めの違いがあるかもしれません。j*j <= iと をテストした方がよいでしょうj*j > i

于 2013-06-02T10:35:54.180 に答える