第1个回答 推荐于2018-03-19
单看素数判断函数,楼上的算法效率已经很高了,但是 For 循环条件 i * i <= n 效率并不是想象的那么高,由于每次循环i都是变化的因此每次for循环的表达式判断都有一次乘法和比较运算 如果改成这样就不会了 i <= sqrt(n) 虽然用了一次比较耗时的开方运算但是由于编译器的优化,开方运算只在整个判断素数函数中执行一次
修改后代码为
#include <stdio.h>
#include <math.h>
int isPrime(int n)
{
int i = 2;
for( ; i <= sqrt(n); i = (i + 1) | 1)
if(n % i == 0)
return 0;
return n > 1;
}
int main(void)
{
int i = 2;
for( ; i < 100; i++)
if(isPrime(i))
printf("%d\n", i);
return 0;
}
BTW:当然,如果是求批量的素数的话,这个算法效率也是很低的,楼主可以去搜索素数求法的其他算法。
第2个回答 2008-03-23
#include <stdio.h>
int isPrime(int n)
{
int i = 2;
for( ; i * i <= n; i = (i + 1) | 1)
if(n % i == 0)
return 0;
return n > 1;
}
int main(void)
{
int i = 2;
for( ; i < 100; i++)
if(isPrime(i))
printf("%d\n", i);
return 0;
}本回答被提问者和网友采纳