所以在拔掉头发 30 分钟后,我决定来 SO 寻求帮助:
10以下的素数之和为2 + 3 + 5 + 7 = 17。
求两百万以下的所有素数之和。
现在,我不想知道如何解决这个问题——这很容易——尤其是答案。我想知道为什么我的代码在运行时没有给我正确的答案(C#):
using System;
using System.Collections.Generic;
public class Euler010 {
public static bool isPrime(Int64 n) {
if (n <= 1)
return false;
if (n < 4)
return true;
if (n % 2 == 0)
return false;
if (n < 9)
return true;
if (n % 3 == 0)
return false;
Int64 r = (Int64)Math.Floor(Math.Sqrt((double)n));
Int64 f = 5;
while (f <= 4) {
if (n % f == 0)
return false;
if (n % (f + 2) == 0)
return false;
f += 6;
}
return true;
}
public static void Main() {
Int64 sum = 2;
for (Int64 n = 3; n <= 2000000; n+=2) {
if (isPrime(n)) {
sum += n;
}
}
Console.WriteLine(sum);
Console.ReadLine();
}
}
当运行到 时n <= 10
,它会输出17
,就像它应该的那样。当运行任何易于手动计算的东西时,它会输出正确的答案(如n <= 20
-> 77
)。
但是,当我运行它时,它输出666667333337
错误。
有任何想法吗?