C语言练习---【求素数】(一篇带你掌握素数求解)

news/2024/4/29 19:05:51/文章来源:https://blog.csdn.net/weixin_63115236/article/details/127608463

🦖作者:学写代码的恐龙
🦖博客主页:学写代码的恐龙博客主页
🦖专栏:【初级c语言】
🦖语录:❀未来的你,一定会感谢现在努力奋斗的自己❀
在这里插入图片描述

C语言练习---【求素数】

  • 🦖:什么是素数?
  • 🦖:求解思路
  • 🦖:求100-200的所有素数(代码实现)
  • 🦖:程序优化
  • 🦖:程序进一步优化

🦖:什么是素数?

素数又叫质数。素数,指的是“大于1的整数中,只能被1这个数本身整除的数”。

🦖:求解思路

知道了什么是素数之后,我们就可以根据素数的特点来判断一个数是否为素数。既然素数只能被1和这个数本身整除,那要判断n是否为素数,我们就可以拿2~n-1的每一个整数去试除n看余数是否为0,如果余数为0,说明n被整除,则n不是素数。如果2-n-1的所有整数去试除n余数都不为0,则说明n是素数。通过分析不难发现,要取到2-n-1的每一个整数,我们需要写一个循环。判断余数是否为0,需要用到求余符号’%'。知道了这些我们就可以来写代码了

🦖:求100-200的所有素数(代码实现)

#include <stdio.h>
int main()
{int i = 0;int j = 0;for (i = 100; i <= 200; i++){//判断i是否为素数int chag = 1;//假设是素数,注意chag的定义一定是在这里for (j = 2; j <=i-1; j++)//利用这个循环依次取到2-i-1的所有整数{if (i % j == 0){chag=0;//如果i % j!=0说明果不是素数,让chag=0,此时i是否为素数判断完毕,可以终止这个循环,判断下一个数字是否为素数break;}}if (chag == 1)//如果i是素数,则程序不会进入上面的if语句,就不会执行chag=0;这条语句,所以chag的值还是最初假设的1,因此我们可以通过这里chag的值来判断i是否为素数{printf("%d ", i);}}return 0;
}

对chag的理解:

代码里定义了一个chag让它赋初值为1,并且假设i是素数,如果当程序判断出i不是素数重新把0赋值给chag,最终我们可以通过chag的值来看出i是否是素数。这里需要特别注意定义chag的位置,必须是在上面代码中的位置进行chag的定义。判断一个数是否为素数之前我们都先假设这个数就是素数,让chag=1;如果chag的定义不在这里,如果判断i不是素数,不是素数的话chag已经被重新赋值为0,如果chag的定义不在这里,那当判断第i+1个数是否为素数的时候chag最初的值就是0,这就会影响我们后面的判断,会导致判断结果出错。

🦖:程序优化

先给大家举个例子:我们都知道2×8=16。这说明16可以被2整除,也可以被8整除,被2整除得8,被8整除得2。因此当我们判断出2可以整除16以后,就无需再判断8是否可以整除16,因为通过数学知识,我们可以直接确定8一定能整除16。还有哪两个数相乘等于16呢?除了2×8=16以外,还有4×4=16。我们不难发现,当a×b=c的时候,a和b中一定有一个数字小于等于根号c,且当我们判断出a可以整除c以后,那b一定可以整除c。因此我们只需要判断2~根号c的所有整数是否可以整除c就可以,如果都不能整除说明c就是素数。反之c不是素数。

#include <stdio.h>
#include <math.h>
int main()
{int i = 0;int j = 0;for (i = 100; i <= 200; i++){//判断i是否为素数int chag = 1;//假设是素数for (j = 2; j <=sqrt(i); j++)//利用这个循环依次取到2-根号i的所有整数{if (i % j == 0){chag=0;//如i % j!=0说明果不是素数,让chag=0,此时i是否为素数判断完毕,可以终止这个循环,判断下一个数字是否为素数break;}}if (chag == 1){printf("%d ", i);}}return 0;
}

🦖:程序进一步优化

我们很容易发现除了2,其他的偶数一定不是素数(至少可以被2整除)。素数只能是2或者奇数,但并不是所有的奇数都素数,因此我们只需要判断奇数是否是素数,无需对偶数进行判断(因为偶数一定不是素数),这可以大大帮助我们缩小判断范围。

因此求100-200的素数,我们可以从101开始判断,并且每次+2,101判断完以后判断103,然后判断105……直到199。这一下就把我们的判断范围缩小了一半。(注意:一定要从奇数开始判断,如果从偶数开始,那每次+2后得到的还是偶数,而除了2所有的偶数都不是素数。)

#include <stdio.h>
#include <math.h>
int main()
{int i = 0;int j = 0;for (i = 101; i <= 200; i+=2)//从101开始判断100-200之间所有的奇数是否是素数{//判断i是否为素数int chag = 1;//假设是素数for (j = 2; j <= sqrt(i); j++)//利用这个循环依次取到2-i-1的所有整数{if (i % j == 0){chag = 0;//如i % j!=0说明果不是素数,让chag=0,此时i是否为素数判断完毕,可以终止这个循环,判断下一个数字是否为素数break;}}if (chag == 1){printf("%d ", i);}}return 0;
}

到这里,如何求解素数就讲解完了,,喜欢的话可以点赞、评论和收藏哟!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410260.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(7)

文章目录前期准备1. 以df的列名创建一个DataFrame2. 打印所有换手率为非数字的行3. 删除所有换手率为非数字的行4. 重置df的行号5. 绘制‘还手’密度曲线6. 计算后一天和前一天收盘价的差值7. 计算后一天与前一天收盘价的变化率8. 设置时间索引9. 使用时间索引&#xff0c;分别…

JavaScript 49 JavaScript 作用域

JavaScript 文章目录JavaScript49 JavaScript 作用域49.1 JavaScript 函数作用域49.2 局部 JavaScript 变量49.3 全局 JavaScript 变量49.4 JavaScript 变量49.5 自动全局49.6 严格模式49.7 HTML 中的全局变量49.8 警告49.9 JavaScript 变量的有效期49.10 函数参数49 JavaScrip…

Mysql深度解析(一)索引底层数据结构与算法

MySQL底层索引是用B树实现的 传送门&#xff1a;什么是B-树、B树、B*树 传送门&#xff1a;深入理解MySQL索引底层数据结构与算法 传送门&#xff1a;MySQL中Innodb的索引 1 索引是什么? 索引&#xff1a;帮助Mysql高效获取数据的排好序的数据结构。 2 Mysql索引为什么用…

Sping的IoC容器和依赖注入

IoC Inversion of Control 使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程中对象创建控制权由程序转移到外部&#xff0c;此思想称为控制反转 Spring实现了IoC的思想&#xff0c;Spring提供了一个容器&#xff0c;称为IoC容器&#xff0c;用…

【CSS】CSS选择器全解指南【CSS基础知识详解】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【CSS】 【CSS专栏】已发布文章 &#x1f4c1;【CSS基础认知】 本文目录【CSS选择器全解指南】&#x1f319;CSS注…

SpringBoot 转发请求至指定页面

1、前言 原先的页面访问地址为&#xff1a;http://127.0.0.1:8888/office/schdule/index/&#xff0c; 重构项目&#xff0c;SpringBoot 项目&#xff0c;前后分离&#xff0c;前端文件放置静态目录&#xff08;static&#xff09;下&#xff0c;访问地址&#xff1a;http://12…

计算机毕业设计(附源码)python疫情管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

URP下的OffScreen Particle Render

【博物纳新】专栏是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。随着越来越多的项目使用…

jsp个人评价管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 个人评价管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

多模态自编码器从EEG信号预测fNIRS静息态

导读 本研究介绍了一种深度学习架构&#xff0c;用于评估40名癫痫患者的多模态脑电图(EEG)和功能性近红外光谱(fNIRS)记录。长短期记忆网络和卷积神经网络集成在一个多模态序列到序列的自编码器中。训练后的神经网络通过从EEG全谱和特定EEG频段中分层提取深度特征&#xff0c;…

fscan:一键自动化、全方位漏洞扫描的开源工具

https://blog.csdn.net/osfront/article/details/116049846 打开服务器看到了一个软件fscan64,并有运行页面。因为没见过,吓了我一跳,搜索了下是什么,记录下。 简介 fscan 是一个内网综合扫描工具,方便一键自动化、全方位漏洞扫描。 它支持主机存活探测、端口扫描、常见服务…

【Java数据结构】顺序表

我们不过是普通人&#xff0c;只不过在彼此眼中闪闪发光 目录 1.模拟实现顺序表 1.1 顺序的结构 1.2 顺序表的成员属性 1.3 顺序表的构造方法 1.4 顺序表的成员方法 1.4.1 扩容 1.4.2 打印顺序表 1.4.3 尾插 1.4.4 在指定位置插入 1.4.5 判断数组中是否有这个元素…

SSH婴幼儿产品销售系统电商购物系统(含源码+论文+答辩PPT等)

该项目采用技术JSP、strust2、Spring、Hibernate、Tomcat服务器、MySQL数据库 &#xff0c;项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程 本系统结构如下&#xff1a; 1&#xff0c;游客访问 |–系统首页&#xff0c;查看所有的商品信息和相关的菜单信息 |–…

每日一记:笔记工具使用、计算机基础知识、编程语言认识

1、笔记工具的使用 我现在使用的是typora这个文档工具 markdown语法 常见操作有&#xff1a;标题、代码块、引用、列表等 typora工具的主页面 我们可以编辑内容 做笔记 。。。 标题分类&#xff1a; 和html&#xff08;超文本标记语言 前端部分一样&#xff09;分为六级标题…

拉卡拉第三季营收13.45亿:净利8372万 同比降73%

雷递网 雷建平 10月31日拉卡拉支付股份有限公司&#xff08;证券代码&#xff1a;300773&#xff0c;证券简称&#xff1a;拉卡拉&#xff09;日前发布财报&#xff0c;财报显示&#xff0c;拉卡拉2022年前三季营收43.55亿元&#xff0c;同比降11.83%&#xff1b;拉卡拉2022年前…

Shell编程从看懂到看开②(字符串、数组、注释、流程控制、read读取控制台输入)

文章目录Shell字符串单引号双引号拼接字符串获取字符串长度提取子字符串查找子字符串Shell数组定义数组读取数组获取数组的长度Shell注释流程控制if判断case语句for 循环while 循环read 读取控制台输入Shell字符串 字符串是shell编程中最常用最有用的数据类型&#xff08;除了…

【DDR3 控制器设计】(5)DDR3 的仲裁读写操作设计

写在前面 本系列为 DDR3 控制器设计总结&#xff0c;此系列包含 DDR3 控制器相关设计&#xff1a;认识 MIG、初始化、读写操作、FIFO 接口等。通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等&#xff0c;附上汇总博客直达链接。 【DDR3 控制器设计】系列…

爆破校园网的宽带

前提&#xff1a;学校的手机号前7位相同&#xff0c;宽带密码都是手机号后六位。仅供学习。 准备工作&#xff1a;电脑一台&#xff0c;把校园网的宽带水晶头插在电脑上&#xff0c; 步骤&#xff1a; winR输入Rasphone点击新建&#xff0c;宽带&#xff0c;输入宽带名称&am…

Kubernetes(31):kubeasz单主机模式

前言 有时候&#xff0c;我们只需要k8s集群进行项目测试&#xff0c;能够使用的主机可能只有一台&#xff0c;那么如何构建一台单机的k8s集群&#xff1f; 单机版的k8s集群可以用于本地测试&#xff0c;或者内部测试环境&#xff0c;或者个人电脑上的项目测试。 那么我们可以使…

Html保留空格和换行

效果&#xff1a; 代码&#xff1a; <pre> 这是一段文本这是一段文本这是一段文 本这是一 段文本这是一段文本 </pre>