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