static bool IsPrime2(int value)
{
if (value < 2)
return false;
int t = (int)Math.Sqrt(value);
for (int i = 2; i <= t; i++)
{
if (value % i == 0)
{
return false;
}
}
return true;
}
上面这个是在网上看到的
下面这个是改良的
static bool IsPrime(int num)
{
if(num<2)
return false;
if ((num & 1) != 0)
{
int t = (int)Math.Sqrt(num);
for (int i = 3; i <= t; i+=2)
{
if (num % i == 0)
return false;
}
return true;
}
return num == 2;
}
改良后偶数不再进行取根号运算和for运算,只需要做&运算和==判断,效率更高;而且在for处每次+2较少取余计算。
比较一下10000000内的素数判断
总用时还是能明显看出来的,虽然平均用时很短,可以忽略不记,但是大量判断是否为素数时还是使用改良版合适