素数的判断对于初学C语言的人来说,对循环语句的使用和算法的选择是一个非常好的锻炼。
判断一个数是不是素数,即判断该数是否除了能被1和它本身整除外,不能被任何数整除。首先,想到的是从2开始进行除余,代码如下:
#includevoid main(){int i,j;for(i=100;i<=200;i++){for(j=2;j
其次,对于这个算法还可进行优化。显而易见,偶数都是非素数。 所以,可以将所有的偶数舍去,只对奇数进行判定。而除的时候用1和2也没有多少意义,1除任何数都是可以整除的,而偶数已经被舍去除2也没有意义。优化后代码如下:
#includeint main(){ int i,j; for(i=101;i<=200;i=i+2) { for(j=3;j
其实,这个程序优化到这一步还不是特别地好。试想,i必然是由两个数相乘而得,那么就不必从101一直除到200-1,可以直接从2到√i即可,这样大大地缩短了程序的运行时间。优化代码如下:
#include#include int main(){ int i,j,k; for(i=101;i<=200;i=i+2) { k=sqrt(i); for(j=3;j =k) printf("%6d",i); } return 0;}
通过对素数判定算法的优化,可以看出优化对于整个程序的时间复杂度有很大的提高,而优化对于一个程序也是至关重要的。在以后的学习中,不能拘泥于写出代码,运行没有问题就行了。而要一步一步去进行优化,使得其更加完美。