我创建了一个简单的程序来计算素数,如下所示:
var db = new HighScoreEntities();
List<Int64> primes = new List<Int64>(){1};
for (Int64 x = 2; x < Int64.MaxValue; x++)
{
if (primes.FirstOrDefault(y=> x%y == 0) == 0){
primes.Add(x);
db.Primes.AddObject(Prime.CreatePrime(x));
db.SaveChanges();
}
}
我的问题是,y
在第一次通过后会出现225,之后看似随机数字。为什么不在“素数”列表中迭代?我也尝试使用具有相同结果的Exists函数。
答案 0 :(得分:5)
1不是素数,因此将其添加到primes
可能是一个糟糕的开始。看起来在每个循环迭代中,您在primes
中找到第一个元素,使得x / 1的余数为0,这将始终为真。
我没有亲自尝试这个程序,所以我错了,但这应该是一个好的起点。
答案 1 :(得分:3)
答案 2 :(得分:2)
我在这段代码中看到的第一个问题是primes
列表初始化为1.该号码存在两个问题 - 1不是素数,1总是符合FirstOrDefault
中提出的要求lambda,因为任何一个模数都会在结果中给出0。
除此之外,一切似乎都很好。