繁体   English   中英

C#中前1000个素数的总和

[英]Sum of first 1000 Prime Numbers in C#

我试图在C#中得到前1000个素数的总和,但我使用的代码非常慢,需要永远计算,到目前为止还没有返回有效总和。

我是新手,我希望你们中的任何人都能看看,帮助我提高代码效率,让我知道自己做错了什么。 如果我在论坛规则方面做错了,也请告诉我。

提前感谢您宝贵的时间!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            long sumOfPrime=0;

            Console.WriteLine("Calculating Sum of Prime");

            for (int i = 1, primeCounter = 0; primeCounter <= 1000; ++i)
            {
                if (!IsPrime(i)) 
                { 
                    continue; 
                }
                else 
                { 
                    primeCounter = +1; 
                    sumOfPrime = +i; 
                }
            }

            Console.WriteLine(sumOfPrime);
        }

        static bool IsPrime(int number)
        {
            if (number == 1) 
            { 
                return false; 
            }

            if (number == 2) 
            { 
                return true; 
            }

            for (int i = 2; i <= Math.Ceiling(Math.Sqrt(number)); ++i)
            { 
                if (number % i == 0) 
                { 
                    return false; 
                } 
            }

            return true;
        }
    }
}       

你的错误是:

primeCounter = +1

这会每次都重置计数器。 我想你的意思是

primeCounter += 1

...增加它。 甚至更好:

primeCounter++

以下返回3682913作为前1000个素数的总和,并在不到一秒钟内完成。 我不确定我是否遵循IsPrime方法的for循环中的逻辑。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Find1000Primes
{
    class Program
    {
        static void Main(string[] args)
        {
            int totalPrime = 0;
            int countPrime = 1000;
            int x = 0;  // counter for the primes
            int i = 0;  // each number that is checked starting with 0

            while (x < countPrime)
            {
                bool prime = IsPrime(i);
                if (prime)
                {
                    totalPrime = totalPrime + i;
                    x++;
                }
                i++;
            }
            Console.WriteLine(totalPrime.ToString());
            Console.ReadLine();
        }

        public static bool IsPrime(int number)
        {
            if ((number & 1) == 0)
            {
                if (number == 2)
                    return true;
                else
                    return false;
            }

            for (int i = 3; (i*i) <= number; i+=2)
            {
                if ((number % i) == 0)
                    return false;
            }
            return number != 1;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM