程序的效率有关问题
程序的效率问题int prime(int n) { int a2//n为1时没有考虑 while (an)if (!(n%a++))break if(an+1
程序的效率问题
int prime(int n)
{
int a=2; //n为1时没有考虑
while (a<=n)
if (!(n%a++))
break;
if(a==n+1 && n!=1)
return 1;
return 0;
}
int prime(int n)
{
int i;
if(n<2) return 0; //n为1时考虑了
for(i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
都看看哪个函数的效率比较高,详细的解释一下吧,谢谢!
[解决办法]都不高,判断是否是质数,只要从2到 根号n就可以,第二个虽然是i不会超过根号n,但是循环每次都做乘法,没有必要
int mMax=sqrt(n);
for(i=2;i<=mMax;i++)
if(n % i==0) return false;
return true;
[解决办法]效率上考虑,需要从时间和空间两方面考虑的吧。
但从时间上考虑,第二种循环的次数较第一种循环次数少哦。所以,第二种效率稍微高一些。