打印100~200间的素数

来源:互联网 发布:java支付平台开发demo 编辑:程序博客网 时间:2024/05/20 05:53


一般思路:遍历100~200间每个数,并对每个数判断2~其本身-1之中,是否存在能够该数整除的因子,若有,则这个数不是素数,否则这个数是素数。

代码如下:

 #include <stdio.h>int main(){                int i=100;for(i=100;i<=200;i++){int j;for(j=2;j<i;j++){if(i%j==0){break;}if(j==i-1){printf("%d ",i);}}}return 0;}
优化方案:

1.因为一个数若不是素数,则这个数可以拆解为a*b,而其中假设a较小,a的最小值为2,也就是说b的最大值为这个数的1/2,因此对于上述方案可以进行优化,使j只需要到i/2即可。

代码如下:

#include <stdio.h>int main(){        int i=100;for(i=100;i<=200;i++){int j;for(j=2;j<=i/2;j++){if(i%j==0){break;}if(j==i/2){printf("%d ",i);}}}return 0;}
2.因为偶数可以拆解成2*x,因此偶数绝不会是素数

代码如下:

#include <stdio.h>int main(){        int i=100;for(i=101;i<=200;i+=2){int j;for(j=2;j<=i/2;j++){if(i%j==0){break;}if(j==i/2){printf("%d ",i);}}}return 0;}

3.因为一个数可以拆解为a*b,设a是较小的那个数,则a的最大值不过是i的开平方,在第1种方法的基础上可以将j 的范围进一步缩小,j只需遍历至sqrt(i)即可

代码如下:

#include <stdio.h>#include <math.h>int main(){        int i = 101;for (; i <= 200; i+=2 ){int j = 2;for (; j <= sqrt(i); j++){if ( i % j == 0 ){break;}}if (j > sqrt(i)){printf("%d ", i);}}return 0;}
这种方法是所有方案中最优,可以减少遍历的时间。


0 0
原创粉丝点击