Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找数字的代码是否为素数_C#_C# 4.0 - Fatal编程技术网

C# 查找数字的代码是否为素数

C# 查找数字的代码是否为素数,c#,c#-4.0,C#,C# 4.0,这是真正的代码审查-但我不确定它是否真的适合目前的CodeReview SE 首先,当if子句导致返回时,不需要else 然后,您当然要检查n%i而不是n/i 此外,您的限制可以是n的平方根,而不是n/2-这只是一种优化 然后,在返回true之前,您希望遍历循环直到达到极限 最后,你想考虑一下你想用否定的N做什么。如果希望所有负n都返回false,那么第一个If将变成If n

这是真正的代码审查-但我不确定它是否真的适合目前的CodeReview SE

首先,当if子句导致返回时,不需要else

然后,您当然要检查n%i而不是n/i

此外,您的限制可以是n的平方根,而不是n/2-这只是一种优化

然后,在返回true之前,您希望遍历循环直到达到极限

最后,你想考虑一下你想用否定的N做什么。如果希望所有负n都返回false,那么第一个If将变成If n<2。否则,您必须为n==-1添加一个子句

综合所有这些因素,除了平方根优化外,您将得到:

public static bool IsPrime(int n)
  {
    if (n == 0 || n==1) { return false;}
    else
    {
      for (int i=2;i<=n/2;i++)
      {
        if(n/i == 0) {return false;}
        else {return true;}
      }
    }
  }

你的问题是什么?用n%i替换n/i一旦你听从@PetervanderHeijden的建议,并且你重新思考你的循环,代码应该会工作。然后,有几件事可以让你的代码变得更好,但也许这会更适合你CodeReview@oerkelens不,它不会,它在第一次运行循环后仍然返回。@Stefan我编辑了我的评论,也看到了那个缺陷:PWhyi@Bakudan正如我提到的,你可以用n的平方根作为上限,当然,您可以先检查/2,然后在i+=2的情况下从3到上限,但这些都是对算法的优化,超出了清理代码和工作的范围。如果你真的想对其进行优化,你可能无论如何都想实现一个筛子。
public static bool IsPrime(int n)
{
  if (n < 2) return false;
  for (int i=2;i<=n/2;i++)
  {
    if(n%i == 0) return false;
  }
  return true;
}