我一直在研究这个问题一段时间,但我无法弄清楚为什么我不断收到溢出错误。
该代码在一定程度上可以正常工作,然后不适用于较大的值。我已经对其进行了测试,发现断点是输入 225287(最后一个非断点值为 225286,输出为 2147431335)。
我怎样才能让它为 2,000,000 工作?
class SumOfPrimes{
static void Main(string[] args)
{
Primes primes = new Primes(2000000);
Console.WriteLine(primes.list_of_primes.Sum());
Console.ReadLine();
}
}
class Primes
{
public HashSet<int> all_numbers = new HashSet<int>();
public HashSet<int> list_of_primes = new HashSet<int>();
public HashSet<int> list_of_nonprimes = new HashSet<int>();
public Primes(int n)
{
all_numbers = new HashSet<int>(Enumerable.Range(1, n));
for (int i = 2; i < Math.Sqrt(n) + 1; i++)
{
for (int j = 3; j <= n / i; j++)
list_of_nonprimes.Add(i * j);
}
list_of_primes = new HashSet<int>(all_numbers.Except(list_of_nonprimes));
}
}