Python案例--100到200的素数

一、问题描述

素数(Prime Number)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。判断一个数是否为素数是计算机科学和数学中的一个经典问题。本实例的目标是找出101到200之间的所有素数,并统计它们的数量。

二、程序分析

判断一个数是否为素数的基本方法是:用一个数分别去除2到该数的平方根(sqrt(这个数))。如果在这个范围内找到一个数能够整除它,则表明该数不是素数;反之,如果没有任何一个数能够整除它,则该数是素数。这种方法的效率较高,因为一个合数(非素数)必然有一个小于或等于其平方根的因数。

此外,使用else语句可以进一步简化代码逻辑。在for循环中,如果没有任何break语句被执行,则else块将被执行。这可以用来判断一个数是否为素数。

三、Python实现

以下是基于上述分析的Python程序实现:

import math

print("正在查找101到200之间的所有素数(使用基本方法):")

# 基本方法
prime_count = 0
for i in range(101, 201):  # 从101到200
    flag = 0
    for j in range(2, round(math.sqrt(i)) + 1):  # 检查从2到sqrt(i)
        if i % j == 0:  # 如果能被整除,则不是素数
            flag = 1
            break
    if flag == 0:  # 如果没有找到能整除的数,则是素数
        print(i)
        prime_count += 1

print("\n101到200之间的素数总数为:", prime_count)

四、代码解析

1. 基本方法

(1)外层循环
for i in range(101, 201):
  • 遍历101到200之间的所有整数,逐一判断每个数是否为素数。

(2)内层循环
for j in range(2, round(math.sqrt(i)) + 1):
  • 对于每个数i,从2开始,检查到sqrt(i)(取平方根并向上取整)。这是因为如果一个数i不是素数,它必然有一个因数小于或等于其平方根。

(3)判断是否为素数
if i % j == 0:
    flag = 1
    break
  • 如果i能被j整除(即i % j == 0),则i不是素数,设置标志变量flag为1,并退出内层循环。

(4)输出素数
if flag == 0:
    print(i)
    prime_count += 1
  • 如果内层循环结束后,flag仍为0,说明i是素数,输出该数,并将素数计数器prime_count加1。

五、运行结果展示

运行上述代码,输出结果如下:

从运行结果可以看出:

  1. 在101到200之间,共有21个素数。

  2. 两种方法(基本方法和使用else简化的方法)的输出结果一致,验证了代码的正确性。

六、代码优化

虽然上述代码已经能够正确地找出101到200之间的所有素数,但还可以进一步优化以提高效率。以下是一个优化版本:

import math
print('\n使用“else”简化代码:\n')

# 使用else简化代码
prime_count = 0  # 重新初始化素数计数器
for i in range(101, 201):
    for j in range(2, round(math.sqrt(i)) + 1):
        if i % j == 0:
            break  # 如果找到能整除的数,则退出内层循环
    else:  # 如果没有执行break,则是素数
        print(i)
        prime_count += 1

print("\n101到200之间的素数总数为:", prime_count)

优化点解释

2. 使用else简化代码

(1)外层循环
for i in range(101, 201):
  • 与基本方法相同,遍历101到200之间的所有整数。

(2)内层循环与else
for j in range(2, round(math.sqrt(i)) + 1):
    if i % j == 0:
        break
else:
    print(i)
    prime_count += 1
  • 内层循环逻辑与基本方法相同,但如果内层循环没有执行break(即没有找到能整除的数),则执行else块。

  • else块中输出素数,并将素数计数器prime_count加1。

七、总结

通过合理的算法设计和代码优化,我们可以高效地找出101到200之间的所有素数。本文提出的优化方法不仅提高了代码的效率,还增强了代码的可读性和可维护性。通过运行结果的展示,我们可以清晰地看到程序的正确性和效率。

!仅供参考

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

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

相关文章

JavaScript中的隐式类型转换

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…

Git Bash 配置 zsh

博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入: if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …

具身智能体俯视全局的导航策略!TopV-Nav: 解锁多模态语言模型在零样本目标导航中的顶视空间推理潜力

作者:Linqing Zhong, Chen Gao, Zihan Ding, Yue Liao, Si Liu 单位:北京航空航天大学,新加坡国立大学,香港中文大学多模态实验室 论文标题:TopV-Nav: Unlocking the Top-View Spatial Reasoning Potential of MLLM …

python爬虫入门(一) - requests库与re库,一个简单的爬虫程序

目录 web请求与requests库 1. web请求 1.1 客户端渲染与服务端渲染 1.2 抓包 1.3 HTTP状态代码 2. requests库 2.1 requests模块的下载 2.2 发送请求头与请求参数 2.3 GET请求与POST请求 GET请求的例子: POST请求的例子: 3. 案例:…

思科交换机telnet配置案例

目录 1.telnet简述2.网络拓扑3.设备说明4.网络配置4.1 电脑PC ip设置4.2 网络交换机telnet配置 5.小结 1.telnet简述 Telnet是远程登录服务的一个协议,该协议定义了远程登录用户与服务器交互的方式。它允许用户在一台联网的计算机上登录到一个远程分时系统中&#…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称…

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型

摘要:我们推出了Sigma,这是一个专为系统领域设计的高效大型语言模型,其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构,并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询(Q&…

Day27-【13003】短文,单链表应用代码举例

文章目录 单链表的应用概览查找单链表倒数第k个结点查找单链表的中间结点将单链表逆置 第二章真题检测 单链表的应用概览 查找单链表倒数第k个结点 本节给出单链表的4个应用示例。单链表结点的定义与本章第三节中的定义相同。为了方便,重新写出来。 #define TRUE …

java求职学习day18

常用的设计原则和设计模式 1 常用的设计原则(记住) 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 (1)开闭原则(Open Close Principle…

2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛A题完整思路分析论文 目录 摘要 一、问题重述 二、 问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1样例代码运行结果&…

UART ,IIC 和SPI三种总线协议

1.UART 1.1 简介 UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器。 常见的串行、异步通信总线,两条数据线Tx、Rx,实现全双工通信,常用于主机与外设的通信,点对点。 1.2 硬件连接 交叉…

IPhone14 Pro 设备详情

目录 产品宣传图内部图——后设备详细信息 产品宣传图 内部图——后 设备详细信息 信息收集于HubWeb.cn

海外问卷调查渠道查如何设置:最佳实践+示例

随着经济全球化和一体化进程的加速,企业间的竞争日益加剧,为了获得更大的市场份额,对企业和品牌而言,了解受众群体的的需求、偏好和痛点才是走向成功的关键。而海外问卷调查才是获得受众群体痛点的关键,制作海外问卷调…

如何跨互联网adb连接到远程手机-蓝牙电话集中维护

如何跨互联网adb连接到远程手机-蓝牙电话集中维护 --ADB连接专题 一、前言 随便找一个手机,安装一个App并简单设置一下,就可以跨互联网的ADB连接到这个手机,从而远程操控这个手机做各种操作。你敢相信吗?而这正是本篇想要描述的…

linux——进程树的概念和示例

一些程序进程运行后,会调用其他进程,这样就组成了一个进程树。 比如,在Windows XP的“运行”对话框中输入“cmd”启动命令行控制台,然后在命令行中输入“notepad”启动记事本,那么命令行控制台进程“cmd.exe”和记事本进程“note…

linux系统centos版本上安装mysql5.7

步骤 1: 安装 MySQL 5.7 添加 MySQL Yum Repository 首先,你需要添加 MySQL 的官方 Yum repository。打开终端并执行以下命令: sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 这条命令会为 CentOS 7 添加 MySQL…

Cross-Resolution知识蒸馏论文学习

TPAMI 2024:Pixel Distillation: Cost-Flexible Distillation Across Image Sizes and Heterogeneous Networks 教师模型使用高分辨率输入进行学习,学生模型使用低分辨率输入进行学习 学生蒸馏损失:Lpkd和Lisrd Lpkd:任务损失lo…

java爬虫工具Jsoup学习

目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么? 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM&#xff0…

29. 【.NET 8 实战--孢子记账--从单体到微服务】--项目发布

这是本专栏最后一篇文章了,在这片文章里我们不重点讲解如何配置服务器,重点讲如何发布服务,我们开始吧。 一、服务器配置 服务器配置包含:服务器的选择和项目运行环境的配置,下面我们分别来讲解一下。 在服务器选择上…