从python转向C语言的第二周,终于从一位老师那里感受到算法的魅力。
一个检索素数的算法以前也会写,学了C语言之后也尝试写了一个:
-计算10万以内的质数
#include <stdio.h>
int main(){
int i=0;
int j=0;
int count=0; // 统计个数
for (i=1;i<100000;i++)
{
for (j=2;j<i;j++)
{
if (i%j==0)
break;
}
if (j==i)
{
printf("%d\n", i);
count++;
}
}
printf("共%d个素数", count);
return 0;
}
上面是我一开始按照写python时的思路写的,单看结果没有任何问题。因为C语言本身比python快很多,所以一开始我也没觉得有什么不好,直到从这位老师中学到了这个……我直接被震翻在地……
#include <stdio.h>
#include <math.h>
int main(){
int i=0;
int j=0;
int count=1; // 统计个数
printf("2\n"); // 直接打印2比条件选择省事的多
for (i=3;i<100;i+=2) // 偶数除了2以外不可能是质数
{
/*若i为和数,则i一定可以写为a乘以b的形式
因此只需遍历一半的i是否能被整除就可以判断*/
for (j=2;j<=sqrt(i);j++)
{
if (i%j==0)
break;
}
if (j>sqrt(i))
{
printf("%d\n", i);
count++;
}
}
printf("共%d个素数", count);
return 0;
}
这样一来,遍历的时间减少了将近2/3……