有人能告诉我为什么这个代码不起作用吗?我正试图找到第10001个素数

  • 本文关键字:10001个 代码 不起作用 c# primes
  • 更新时间 :
  • 英文 :


代码给出的答案43739是错误的。我不知道我把代码的哪一部分搞砸了,如果能提供帮助,我将不胜感激。

{
int primenumbers = 4;
int thenumber = 2;
int finalnumber = 0;
while (primenumbers <= 10001)
{
for (int x = 2; x < 10; x++)
{
if (thenumber % x == 0)
{
x = 10;
}
if (x == 9)
{
finalnumber = thenumber;
primenumbers += 1;
break;
}
}
thenumber += 1;
}
Console.WriteLine(finalnumber);
}

让我们将初始问题拆分为更小的问题:首先,检查是否为素数:

private static bool IsPrime(int value) {
if (value <= 1)
return false;
else if (value % 2 == 0)
return value == 2;
int n = (int) (Math.Sqrt(value) + 0.5);
for (int d = 3; d <= n; d += 2)
if (value % d == 0)
return false;
return true;    
}

然后枚举素数(2, 3, 5, 7, 11...(:

// Naive; sieve algorithm will be better off
private static IEnumerable<int> Primes() {
for (int i = 1; ; ++i)
if (IsPrime(i))
yield return i;
}

最后,借助Linq:进行查询

using System.Linq;
...
int result = Primes().Skip(10000).First();
Console.Write(result);

你会得到

104743 

最新更新