我已经在这个问题上工作了一段时间了,我不知道为什么我总是收到溢出错误。

该代码可以很好地工作,然后不适用于更大的值。 我已经对其进行了测试,发现断点为输入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));
    }
 }

===============>>#1 票数:2 已采纳

您拥有的值不适合int大小的内存,因此请尝试使用此处网站上使用的biginteger。

http://msdn.microsoft.com/zh-CN/library/system.numerics.biginteger.aspx

===============>>#2 票数:1

发生了一个整数溢出。 在32位系统上, int最多只能保存2 ^ 31-1(2147483647)的正值。 您可以尝试使用64位整数(我认为C#拥有它们),或者找到任意大小的整数库(@Calpis有用地链接到内置库)。

  ask by phcoding translate from so

未解决问题?本站智能推荐: