求大神们帮我判断一下C语言这两个判断1到某个数之间的素数的程序哪个更好

第一个
# include <stdio.h>
bool IsPrime(int val)
{
int i;
for (i = 2; i<val; ++i)
{
if (val%i == 0)
break;
}
if (i == val)
return true;
else
return false;
}
int main(void)
{
int m;
int val;
scanf("%d", &val);
for (m = 1; m <= val; ++m)
{
if (IsPrime(m))
printf("%d\n", m);
}
return 0;
}
第二个
# include <stdio.h>
bool IsPrime(int m)
{
int i;
for (i = 2; i<m; ++i)
{
if (m%i == 0)
break;
}
if (i == m)
return true;
else
return false;
}
void TraverseVal(int n)
{
int i;
for (i = 2; i <= n; ++i)
{
if (IsPrime(i))
printf("%d\n", i);
}
}
int main(void)
{
int val;
scanf("%d", &val);
TraverseVal(val);
return 0;
}

肯定是第二个啊,这是编程习惯的问题,main函数里的内容能少就少,方便阅读,容易理解。从本质上讲,两个函数式一样的,只是第二个风格好点!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-20
这两个算法一样啊。只是一个写成了函数形式而已。效率相差不大。
那个for才是影响时间的关键
第2个回答  2012-08-20
第二个清晰点,效率差不多;

for (i = 2; i <= n; ++i)改成
for(i=2; i*i <= n; ++i)可以提升效率