我写了一个小程序来打印1000个第一个素数的总和,但由于某些原因我得到了错误的结果。
`C:/Projects/Consumption curves/UKPOV/excel files/&metric_product_CC_2009_salespercap.csv`
结果= 3674995 预期= 3682913
答案 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();