打印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
- 打印100~200间的素数
- 判断素数和打印100-200的素数
- C语言打印100-200间的素数
- 打印100---200之间的素数
- 打印100~200 之间的素数
- 打印100~200 之间的素数
- 打印100~200之间的素数
- 打印100~200 之间的素数
- 打印100—200之间的素数
- 打印100~200 之间的素数
- 打印100-200之间的素数
- 打印100~200之间的素数
- 打印100~200之间的素数
- 打印100-200之间的素数
- 打印出100~200之间的素数
- 打印100~200 之间的素数
- 打印100~200 之间的素数
- 打印100到200之间的素数
- Mysql5.6主从热备配置
- MySQL 存储过程常用SQL语句收集
- 王学岗自定义AsycTask
- Android OkHttp完全解析 是时候来了解OkHttp了
- JS火星坐标系转百度坐标系(公式法)
- 打印100~200间的素数
- POJ 3252 数位DP
- android app中使用application
- 微信公众号在打开的网站中直接进入苹果应用商店
- 区块链钱包怎么开发
- ios开发:push与present的区别
- mysql workbench中PK,NN,UQ,BIN,UN,ZF,AI字段类型标识说明
- 2.Add Two Numbers(2)
- [LeetCode-Java]43. Multiply Strings