文章目录

  • 前言
  • 一、了解素数是什么?
  • 二、不同编写方法
    • 1.依次循环判断
    • 2.优化:利用开方,减少循环次数
    • 3.直接对偶数过滤
  • 三、总结

前言

近期学习C语言,发现了3种方法可以写出100–200之间的素数,且都在不断的优化。


提示:以下是本篇文章正文内容,下面案例可供参考

一、了解素数是什么?

素数就是质数,它的因数只有1和它本身,也就是说,只能被1和它本身整除,其他的数不能整除这个素数。

二、不同编写方法

1.依次循环判断

第一步:外层循环,我们先得到100–200之间的数
第二步:由于素数只能被1和它本身整除,那么我们可以判断除了1和它本身在(2,i-1)之间是否有数可以整除它,因此内层循环我们得到(2,i-1)之间的数字 t
第三步:判断 i 对 t 取余是否为0,如果等于0,说明这个i 有其他的因数;那么跳出循环,不用再往下判断(因为已经出现了一个别的因数,就已经不符合素数要求),跳出内层循环除了i 对 t 取余为0,第二个情况就是t 所有的数循环完之后,没有满足if条件的,就会跳出循环,此时t == i说明没有一个别的数能整除 i
第四步:跳出内层循环且还能满足下面if条件的,说明是第二种情况下跳出内层循环,此时就可以输出 i,得到素数。

int main() {int i;int t;for (i = 100;i <= 200;i++) {for ( t = 2;t < i;t++) {if (i % t == 0) {break;}}if (i == t) {printf("%d ", i);}}return 0;
}

2.优化:利用开方,减少循环次数

这个优化主要是在内层循环上优化了。
那么为什么要这样做,举个例子:例如现在有个数是100,我们判断他是不是素数,那么就只用在2–10之间看是否有数能够整除100,因为100 = 10*10 ,如果一个10变大,必然有10减小了,总有一个因数是<= 10的。
因此对 i 开方 就可以减少循环次数,本来是2–99之间循环,现在是2–10之间循环,更简单一点。
另外,因为t 的范围变了,我们就不能用之前的i == t;我们可以设置一个falg,如果i 对t 取余等于 0,那么就 flag= 0,为假,退出循环,如果循环完了flag 还是初始值1 ,那么说明没有找到满足if条件的,我们就能得到素数。
代码如下(示例):

#include<math.h>
#include<stdio.h>
int main() {int i;int t;int count = 0;for (i = 100;i <= 200;i++) {int flag = 1;for ( t = 2;t <= sqrt(i);t++) {if (i % t == 0) {flag = 0;break;}}if (flag == 1) {count++;printf("%d ", i);}}printf("\n%d", count);return 0;
}

3.直接对偶数过滤

这个相较于第二个方法,只改动了一句,但是算法的时间复杂度减少了不少,因为偶数不是素数(除了2),因此直接从奇数开始,每次+2,那么外层循环的循环次数就大大减少了一半。

#include<math.h>
#include<stdio.h>
int main() {int i;int t;int count = 0;for (i = 101;i <= 200;i+=2) {int flag = 1;for ( t = 2;t <= sqrt(i);t++) {if (i % t == 0) {flag = 0;break;}}if (flag == 1) {count++;printf("%d ", i);}}printf("\n%d", count);return 0;
}

三、总结

求素数的方法还有很多,这里只是一小部分,大家多多练习,就能找到更多更简单的方法!

C语言 求100--200之间的素数相关推荐

  1. c语言1到200能被4整除,c语言求[100,200]之间能被4整除,不能被5整除的数之和

    C语言求100-500之间的素数.懂的人帮下我, #include#includevoidmain(){inti,j;for(j=101;j 用C语言编程求100-200之间能被3整除但不能被5整除的 ...

  2. c语言求素数_C语言 | 求100~200的素数

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  3. 【C语言练习】将100~200之间的素数输出

    将100~200之间的素数输出 一.编程思路 1.首先,我们要意识到,找出某个区间内符合条件的数,就需要对这个区间内的所有数进行遍历,而最常用的遍历方法就是利用for循环: 2.其次,在确定了遍历区间 ...

  4. 求出100~200之间的素数

    求出100~200之间的素数的个数,并求出所有的素数. 分析:素数定义是只能被1和该数本身整除 package com.math.forth;/*** 求出100~200之间的素数的个数,并求出所有的 ...

  5. 输出100 - 200之间的素数C语言

    输出100 - 200之间的素数 素数就是质数,即除了1和它本身不再有求它因数的自然数 那么这道题的思路就是用100到200之间的数去除以比这个数小的所有数(除了1和它本身),如果有余数说明它不是一个 ...

  6. 求解100~200之间的素数

    求解100~200之间的素数目录 文章目录 求解100~200之间素数目录 前言 一.素数是什么? 二.求解素数的方法 1.常规方法 2.优化方法 3.另辟蹊径 总结 前言 对于很多人对求解素数存在一 ...

  7. 打印100~200 之间的素数,输出乘法口诀表,判断1000年---2000年之间的闰年

    1.打印100~200 之间的素数 #include <stdio.h> int main() { int n,i; for(i=100;i<=200;i=i++) { for(n= ...

  8. 打印100~200之间的素数。

    . 打印100~200之间的素数. #include <stdio.h> #include<stdlib.h>void main(){ int a,b; for(a=100;a ...

  9. 打印100~200 之间的素数

    编写思想:对100到200之间的数依次进行for循环判断,看其是否为素数.判断方法:对于一个自然数,除了1以外,不是素数就是合数.若该数字是素数,则不能被除了1和它自身以外的数整除:而一个数如果是合数 ...

  10. 求100~200间的素数以及水仙花数

    题目要求: 1.求100-200之间的素数. 程序清单: ForWhile.java 2.拓展设计 (1)for语句和while语句是等价的,试用嵌套的for循环语句改写上述程序.(2)将程序的运行结 ...

最新文章

  1. http http应用
  2. CentOS --kickstart服务器搭建(一)
  3. myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)
  4. Nacos与Eureka的区别有哪些?
  5. 参数pyinstaller_Python用PyInstaller打包笔记
  6. mysql 二进制日志大小_mysql二进制日志。
  7. CCF CSP202112-1 序列查询
  8. Mac 电脑如何卸载 node
  9. C++写的B+树源码
  10. cache 的设计与实现
  11. java代码生成器,springboot代码生成器—增加生成添加信息,导出excel功能(持续更新)
  12. 单图像超分辨率重建总结
  13. 2. 贯穿软件开发生命周期的测试
  14. ActiveMQ 反序列化漏洞 (CVE-2015-5254)
  15. app 原形设计常用工具总结
  16. 从.weights中提取权重数据
  17. 大型web系统数据缓存设计
  18. LaTeX长表格自动换行(longtable)
  19. BGP路由协议的那些事?(上)
  20. 中国医科大学网络教育计算机应用基础试题,作业与试题选集1906 中国医科大学《计算机应用基础 》复习题.docx...

热门文章

  1. c++获取电脑mac地址
  2. 打气球游戏——Burst Balloons
  3. 数据分析之大数据分析
  4. easypoi导入图片_EasyPOI—导出Excel图片问题
  5. 百度竞价开户需要什么资料,竞价开户流程
  6. 路由器刷OpenWRT实现动态dns
  7. PAT甲级1021 Deepest Root//未满分
  8. weedfs php,Weed-FS之Volume数据迁移
  9. windows系统镜像修复计算机,为你详解win7系统还原及映像修复功能
  10. 一个简单的HTML网页