0

私はこの問題にしばらく取り組んできましたが、オーバーフロー エラーが発生し続ける理由がわかりません。

コードはある程度は正常に機能しますが、より大きな値では機能しません。私はそれをテストし、ブレークポイントが入力 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));
    }
 }
4

2 に答える 2