最小质数对-第12届蓝桥杯国赛Python真题解析

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第63讲。

最小质数对,本题是2021年5月29日举办的第12届蓝桥杯青少组Python编程全国总决赛真题编程部分第4题。题目要求给定一个大于2的偶数,编程找出质数差最小的一对,并输出其差值。

先来看看题目的要求吧。

一.题目说明

提示信息:

质数:是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。最小的质数是2,1不是质数。

大于2的偶数有一个特点,任意一个大于2的偶数可以由一对质数相加得到,但有的偶数不止有一对这样的质数对。

如偶数6,有一对质数相加得6,为(3,3)

如偶数14,有两对质数相加得14,分别是(3,11),(7,7)

编程实现:

给定一个大于2的偶数,在所有满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的质数对中,找出两个质数差值最小的一对,并将差值输出(差值为大数减小数的值,两个质数相等时差值为0)。

例如:偶数16,满足特点的质数对有(5,11)和(3,13),差值最小的一对是(5,11),11减5,差值为6。

输入描述:

输入一个大于2的偶数N

输出描述:

输出满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的所有质数对中,差值最小的那一对的差值

样例输入:

16

样例输出:

6

二.思路分析

这是一道简单的枚举算法题,考查的知识点主要包括循环、条件、函数和素数等。

这就是一个典型的枚举场景,将和为n的所有质数对枚举出来,比较它们的差值,找到最小的差值即可。

我们可以分两个步骤来实现:

1). 自定义函数判断素数

2). 枚举所有质数对,获取最小差值

关于素数的判断,使用的也是枚举算法,之前已经介绍过,具体可以参考《包含3的数字-第10届蓝桥杯省赛Python真题精选》这篇教程。

对于数字n而言,假设其中一个加数为i,则另外一个加数为 n - i。

很显然,这两个加数,一个位于 n // 2的左边,一个位于n // 2的右边,最极端的情况是重叠。

因此,我们在枚举的时候,只需要将范围限定在[2, n // 2]之间就可以了,这样可以减少循环的次数,提升效率。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分两步来编写程序:

  • 定义函数判断素数

  • 枚举所有质数对,获取最小差值

1. 定义函数判断素数

这是一段经典的代码,直接编写代码如下:

图片

代码非常简单,强调两点:

1). 为了确保完整性,对于n < 2的数字,都返回False,即不是素数;

2). 在获取n的算术平方根时,除了可以使用sqrt()函数外,直接使用**0.5 是最简洁的写法。

2. 枚举所有质数对,获取最小差值

根据前面的思路分析,编写代码如下:

图片

代码不多,说明4点:

1). 在获取最值时,通常需要定义最值的初始值,在Python编程中,可以使用正无穷大float('inf')表示最大值,相应的使用负无穷大float('-inf')表示最小值;

2). 在使用range()函数时,第二个参数要设置为 n // 2 + 1;

3). 在获取较小值时,直接使用了min()函数,方便快捷,也可以使用if语句来比较;

4). 第9行代码中,一个质数是n - i,一个是i,其差为 n - i - i,也就是n - 2 * i了。

至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果啦。

四.总结与思考

本题代码在13行左右,涉及到的知识点包括:

  • 循环语句;

  • 条件语句;

  • 自定义函数;

  • 枚举算法;

作为本次国赛的第4题,本题难度一般。关键点有两个,一是熟悉素数的判断,二是如何优化代码结构,让代码变得更加简单,更加高效。

尤其是第二点,良好的代码结构可以让复杂问题变得简单,也可以减少出错的概率,那什么才算是好的代码结构呢?

一般来说,凡是具有独立功能或者重复使用的地方,就可以运用函数的编程思想,将其独立出来,自定义成一个函数。

在学习编程的时候,我们应该秉持”Write less,do more“的思想,用尽量少的代码,实现更多的功能和效果。

超平老师给你留一道思考题,本题中设置min_diff时使用了float('inf'),为什么要设置为最大值?如果不使用float('inf'),还可以设置为多少,为什么?

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至”超平的编程课“gzh。

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

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

相关文章

Flutter 中的 Icon 小部件:全面指南

Flutter 中的 Icon 小部件&#xff1a;全面指南 Flutter 提供了多种方式来展示图标&#xff0c;其中 Icon 是最常用的小部件之一。它不仅用于展示简单的图标&#xff0c;还可以与文本、按钮和其他小部件组合使用&#xff0c;以增强用户界面的交互性。本篇文章将详细介绍 Icon …

Windows内核函数 - ANSI_STRING字符串与UNICODE_STRING字符串

DDK不鼓励程序员使用C语言的字符串&#xff0c;主要是因为&#xff1a;标准C的字符串处理函数容易导致缓冲区溢出等错误。如果程序员不对字符串的长度进行检查&#xff0c;很容易导致这个错误&#xff0c;从而导致整个操作系统的崩溃。DDK鼓励程序员使用DDK自定义的字符串&…

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“羽毛球馆管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 登录界面 后台用户添加 后台用户管理 球场添加 球场…

英特尔处理器-----ERMS

ERMS&#xff0c;全称为Enhanced REP MOVSB/STOSB&#xff0c;是英特尔处理器的一种特性。它增强了使用REP MOVSB和REP STOSB指令进行内存操作的效率 section .datasrc db Hello,World! ; 源数据dst times 12 db 0 ; 目标缓冲区section .textglobal _start _start:mov es…

vj题单 Color the ball c 差分

题目链接&#xff1a;Problem - 1556 (hdu.edu.cn) 笔者思路&#xff1a;利用一维差分数组进行区间同时1的操作&#xff0c;然后还原为一维前缀和数组 笔者答案&#xff1a; #include<stdio.h> int cut[100010];int main() {long N,a,b,i,k1,j;scanf("%ld",…

Leetcode 3148. Maximum Difference Score in a Grid

Leetcode 3148. Maximum Difference Score in a Grid 1. 解题思路2. 代码实现 题目链接&#xff1a;3148. Maximum Difference Score in a Grid 1. 解题思路 这一题的话算是一个脑筋急转弯的题目吧&#xff0c;本质上就是求各个坐标下其右下方矩阵当中除自己外最大的元素是多…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

大模型学习笔记九:模型微调

文章目录 一、什么时候需要Fine-Tuning二、用Hugging Face根据电影评论输出来对电影进行情感分类1)安装依赖2)操作流程3)名字解释4)代码导入库和加载模型、加载数据库、加载tokenlizer5)其他相关公共变量赋值(随机种子、标签集评价、标签转token_Id)6)处理数据集:转成…

Altium Designer封装库和元器件符号库下载与导入教程(SnapEDA 、Ultra Librarian、Alldatasheetcn)

1.AD封装库和元器件符号库下载网址 以下是一些全球热门的Altium Designer封装库和元器件符号库下载网址推荐&#xff1a; Altium Content Vault (现称为Altium Manufacturer Part Search)&#xff1a;这是Altium官方提供的元器件库&#xff0c;可以直接在Altium Designer中使用…

免费体验GPT-4o这5大功能,非常好用!

这几天&#xff0c;OpenAI发布了新的GPT版本&#xff0c;GPT-4o&#xff0c;比GPT4更加智能也更快。 据说&#xff0c;GPT-4o在文本、推理和编码智能方面实现了GPT-4 Turbo级别的性能&#xff0c;在多语言、文本、音频和视觉功能方面甚至超过了市面上所有同类产品。 有几个亮点…

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生…

Element-Ul快速入门

Element-Ul快速入门 引言 Element-UI 是一套基于 Vue.js 的组件库&#xff0c;它为开发者提供了丰富的界面组件&#xff0c;帮助快速构建高质量的网页应用。本文将作为Element-UI的快速入门指南&#xff0c;带领大家了解其基本概念、使用方法以及在实际项目中如何高效地利用这…

构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(四)

LlaMA 3 系列博客 构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(一) 构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(二) 构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(三) 模型红队 人类红队功能强大,但难以扩展,可能需要大量培训和特殊专业知识…

Python进度条工具——tqdm

原文链接&#xff1a;http://www.juzicode.com/python-note-tqdm 在安装Python库文件的时候我们经常可以看到这种进度条&#xff1a; 其实Python库中就自带了现成的工具库——tqdm。 tqdm读起来比较拗口&#xff0c;它是从“进程”的阿拉伯语taqaddum简化而来。 安装tqdm 使用…

C++二叉搜索树搜索二叉树二叉排序树

C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树&#xff08;BST,Binary Search Tree)&#xff0c;也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于&#xff1a;每个结点必须满足“左孩子大于自己&#xff0c;右孩子小于自己”的规则。在这种规则的约束下&#xff0c;二…

ADS Momentum 仿真设置

1、选择Momenttum Microwave。 2、Layout不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建叠层&#xff0c;过孔可以在叠层中右键添加。 5、注意确认端口的Gnd Layer。 6、设置仿真频率。 7、Output Plan。 8、Option。 最后运行仿真&#xff0c;等待结果即…

算法学习(7)-树

目录 开启“树”之旅 二叉树 堆--优先队列 并查集 开启“树”之旅 是不是很像一棵倒挂的树&#xff1f;也就是说它是根朝上&#xff0c; 而叶子朝下的。不像&#xff1f;哈哈&#xff0c;来看看下面的图你就会觉得像啦。 你可能会间&#xff1a; 树和图有什么区别&#xff…

代码生成工具1 ——项目简介和基础开发

1 项目简介 需要提前在数据库建好表&#xff0c;然后执行代码生成工具&#xff0c;会生成简单的Java文件&#xff0c;避免重复编写增删改查代码。类似的工具网上有很多&#xff0c;本人开发这个工具属于自娱自乐。这个专栏会记录开发的过程。 2 项目搭建 数据库使用MySQL &…

APP没有上架就开通了APP支付,微信商户的这个操作绝了

在当今的移动支付时代&#xff0c;APP支付已成为商家与消费者之间的重要桥梁。然而&#xff0c;对于一些尚未上架的应用来说&#xff0c;如何快速开通APP支付功能一直是个难题。最近&#xff0c;微信商户平台的一项新操作&#xff0c;为这类商家带来了福音---APP没有上架&#…

财富增长新途径:副业赚钱方法全攻略

探寻财富之路&#xff1a;多元化赚钱途径解析 在追求财富的道路上&#xff0c;每个人都在以自己的方式前行。然而&#xff0c;正如古人所云&#xff1a;“君子爱财&#xff0c;取之有道。”今天&#xff0c;我将为您揭示一些新颖且实用的赚钱途径&#xff0c;希望能为您的财富…