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

2024-05-16 04:36

本文主要是介绍最小质数对-第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。

这篇关于最小质数对-第12届蓝桥杯国赛Python真题解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993892

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(