我需要一种方法来检查给定数字是否为素数。我在互联网上搜索,我找到了不同的功能,但它们很复杂。所以,我设计了自己的方法来检查数字是否为素数。它对我有用。我只是想知道它是否正确。代码如下:
bool IsPrime(int n)
{
for (int i = 2; i <= 7; i++)
{
if (i < n && n % i == 0)
{
return false;
}
if (i == n)
{
return true;
}
}
return true;
}
答案 0 :(得分:0)
简短回答:不,这不正确。
答案:这是工作代码:
bool IsPrime(int n)
{
if (n <= 1) return false; // .. , -1, 0, 1
if (n == 2) return true; // 2
if (n % 2 == 0) return false; // 4, 6, 8, ...
int sqrt = (int)Math.Sqrt(n); // largest possible factor
for (int i = 3; i <= sqrt; i+=2)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
备注:很多算法可以更好,更快地运行...
<小时/>
修改强>
使用@ Blastfurnace的想法以及其他一些优化版本:
bool IsPrime(int n)
{
if (n <= 1) return false; // .. , -1, 0, 1
if (n % 2 == 0) return (n==2); // 2 and even numbers
if (n % 3 == 0) return (n==3); // 3 and divisible by 3
if (n % 5 == 0) return (n==5);
if (n % 7 == 0) return (n==7); // the magic 7 from OP
if (n < 11) return false;
// calc sqrt as rare as possible, its expensive
int sqrt = (int)Math.Sqrt(n); // largest possible factor
// skip 9, already done with n%3
for (int i = 11; i <= sqrt; i+=2) if (n % i == 0) return false;
return true;
}
这应该可以节省一些CPU周期。
答案 1 :(得分:0)
根据素数的定义,“如果一个大于1的整数只有正数除数(因子)为1且它本身就称为素数。”,0和1不是素数。
修正DrKoch的答案:
bool IsPrime(int n)
{
if( n == 0 || n == 1)
return false;
else if(n == 2)
return true;
else if(n%2 == 0)
return false;
else {
int sqrt = (int)Math.Sqrt(n);
for (int i = 3; i <= sqrt; i+=2)
{
if (n % i == 0)
return false;
}
return true;
}
}