[英]Sum of first 1000 Prime Numbers in C#
I am trying to get the sum of first 1000 prime numbers in C# but the code I am using is very slow, takes forever to compute and so far has not returned with a valid sum. 我试图在C#中得到前1000个素数的总和,但我使用的代码非常慢,需要永远计算,到目前为止还没有返回有效总和。
I am new at this and i was hoping any of you guys could have a look and help me make my code efficient and also let me know what I am doing wrong. 我是新手,我希望你们中的任何人都能看看,帮助我提高代码效率,让我知道自己做错了什么。 Also let me know if I am doing anything wrong with regard to the forum rules. 如果我在论坛规则方面做错了,也请告诉我。
Thanks in advance for your valuable time! 提前感谢您宝贵的时间!
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;
}
}
}
Your error is in: 你的错误是:
primeCounter = +1
This resets the counter every time. 这会每次都重置计数器。 I think what you mean is 我想你的意思是
primeCounter += 1
... which increments it. ...增加它。 Or even better: 甚至更好:
primeCounter++
The following returned 3682913 as the sum of the first 1000 primes and did so in less than a second. 以下返回3682913作为前1000个素数的总和,并在不到一秒钟内完成。 I'm not certain I follow the logic in the for loop of your IsPrime method. 我不确定我是否遵循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.