1000个第一素数的总和给出了错误的输出

时间:2016-07-14 06:41:06

标签: c#

我写了一个小程序来打印1000个第一个素数的总和,但由于某些原因我得到了错误的结果。

`C:/Projects/Consumption curves/UKPOV/excel files/&metric_product_CC_2009_salespercap.csv`

结果= 3674995 预期= 3682913

3 个答案:

答案 0 :(得分:2)

该实现将1标识为素数,这是不正确的;这可以通过如下初始化isPrime来修复。

bool isPrime = i != 1;

这产生了期望的结果3682913;但是也要考虑0的加数。

答案 1 :(得分:0)

一个有效的实现检查只有素数除数直到value平方根;请注意,所有甚至值都是不是素数(只有例外 - 2):

  int count = 1000;

  List<long> primes = new List<long>(count) {
    2 }; // <- the only even prime

  for (long value = 3; primes.Count < count; value += 2) {
    long n = (long) (Math.Sqrt(value) + 0.1);

    foreach (var divisor in primes)
      if (divisor > n) {
        primes.Add(value);

        break;
      }
      else if (value % divisor == 0)
        break;
  }

  // 3682913
  Console.WriteLine(string.Format("{0}", primes.Sum()));
  Console.ReadLine();

尝试count = 1000000,您将获得7472966967499

答案 2 :(得分:-1)

            long sum;
            sum = 0;
            int count;
            count = 0;

            for (long i = 0; count <= 1000; i++)
            {
                if (i == 1) continue;
                bool isPrime = true;

                for (long j = 2; j < i; j++)
                {
                    if (i != j && i % j == 0)
                    {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime)
                {
                    sum += i;
                    count++;
                }
            }
            Console.WriteLine(string.Format("{0}", sum));
            Console.ReadLine();