分解质因数-第12届蓝桥杯国赛Python真题解析

news2024/11/20 1:44:59

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

分解质因数,本题是2021年5月29日举办的第12届蓝桥杯青少组Python编程全国总决赛真题编程部分第2题。题目要求编程计算对于输入的合数N,将其分解质因数后,质因数的个数。

先来看看题目的要求吧。

一.题目说明

提示信息:

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

合数:一个正整数,如果除1和它本身以外,还能被其他正整数整除,叫合数。如6是合数,除了1和6以外,还能被2和3整除。

分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数(分解质因数只针对合数),如合数12 = 2 × 2 × 3。

分解质因数的方法是先用这个合数的最小质因数去除这个合数,结果若是一个质数就不再除下去;若是一个合数就继续按原来的方法从最小质因数除起,直至最后除得的结果是一个质数 。

例如:

合数18分解质因数,首先用最小质因数2去除,除后结果为合数9,继续用最小质因数3去除,除后结果为质数3,就不再除下去。

所以18的质因数为2、3、3,故质因数的个数为3。

图片

编程实现:

给定一个合数N,将N分解质因数后,输出其质因数个数。

输入描述:

输入一个合数N

输出描述:

将N分解质因数后,输出质因数个数

样例输入:

18

样例输出:

3

二.思路分析

这是一道简单的数论题,考查的知识点主要包括循环、条件、除法运算和质数等。

本题涉及的概念比较多,包括因数,质数、合数和质因数,首当其冲的是要分清它们之间的区别。

在小学数学里,两个正整数相乘,那么这两个数都叫做积的因数,或称为约数。

质数和合数是相对的,一个自然数,除了1和本身外,没有其它的因数,就是质数,否则就是合数。

以我们熟悉的数字24为例,如图:

图片

看图说话,这里的2、3、4、6都是24的因数,其中4和6是合数,2和3是质数,所以2和3都属于质因数。

概念清楚了,接下来就是分解质因数的方法和过程了,理解的越透彻,编写代码就越容易。

质因数的分解,最常用的是短除法,步骤如下:

1). 选择最小的质数p = 2,作为除数;

2). 将N除以选定的质数p,如果能整除,则将商作为新的N,同时将p作为一个质因数;

3). 继续使用相同的质数p进行除法操作,如果不能整除,则转到下一步骤;

4). 增加质数p,如果p不能被N整除,那么将p增加1;

5). 重复步骤2、3、4,直到N被完全分解完为止。

什么时候分解完呢,最简单的判断就是n等于1。不过,根据因数的对称特性,可以减少循环次数。

换句话说, 如果整数n有一个大于其平方根的质因子,那么它必然还有一个小于或等于其平方根的质因子(这对质因子相乘得到 n)。因此,我们只需要检查到 p 的平方根即可。

对应的流程图如下:

图片

举个例子,使用短除法对84分解质因数,如图:

图片

解释如下:

1). 开始时,n = 84,将p设置为2;

2). 使用n除以2,即84 / 2,可以整除,找到质因数2,同时将n更新为42;

3). 继续使用n除以2,即42 / 2,可以整除,找到质因数2,同时将n更新为21;

4). 使用n除以2,即21 / 2,不能整除,将p增加1,于是p = 3;

5). 使用n除以3,即21 / 3,可以整除,找到质因数3,同时将n更新为7;

6). 此时p * p = 9,9 > 7,所以循环结束;

7). 最后判断 n 是否大于1,7 > 1,所以7也是质因数。

至此,质因数全部分解完毕,包括2、2、3、7一共4个质因数。

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

三.编程实现

根据上面的思路分析,我们编写程序如下:

图片

代码不多,强调3点:

1). 为了方便查看和调试,这里使用factors列表来保存所有的质因数,你也可以直接使用变量统计个数;

2). 进行除法运算时,必须使用整除运算符;

3). 循环结束时,需要判断n是否为1,如果大于1,则它是最后一个质因数,需要加入列表。

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

四.总结与思考

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

  • 循环语句while;

  • 条件语句;

  • 除法相关运算,包括%和//;

  • 质因数相关的数学知识。

本题难度一般,代码也不多,关键有两点,一是要弄清质因数的相关概念,二是要理解质因数的分解过程。

质数、合数、因数等相关数学知识,一直以来都是在学习编程时研究和讨论最多的话题,必须要熟练掌握,并做到灵活运用。

超平老师给你留一道思考题,在上面的代码中,我们没有判断p是否为质数,怎么就能确保得到的因数一定是质数呢?

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

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

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

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

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

相关文章

数据库备份与恢复--06---MySQL集群高可用架构之MHA

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MySQL集群高可用架构之MHA1.什么是MHAMHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 ,m…

基于springboot实现疾病防控综合系统项目【项目源码+论文说明】

基于springboot实现疾病防控综合系统演示 摘要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以&…

HCIP的学习(OSPF总篇)

HCIA的复习 这边可以与我之前写的HCIA博客结合起来一起看,效果更好 HCIA的学习(6) OSPF状态机 down—关闭-----一旦启动OSPF进程,并发出hello报文,则进入下一个状态init----初始化状态------当收到的hello报文中存在…

EMAP的简单开发(单表)

注意框架版本选择SPA_v1 一个数据源代表一个业务,选择一个就会产生对应的应用 index.jsp是展示的页面 conifg.js是index.jsp引用渲染的一个js文件 index.jsp中的全局变量中有一个pageMeta和contaextPath: pageMeta:是一个对象,…

【Linux】从零开始认识动静态库 - 静态库

送给大家一句话: 永不言弃,就是我的魔法! ——阿斯塔《黑色四叶草》 ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ଘ(੭ˊ꒳​ˋ)੭✧ 从零…

ADS基础教程11 - TouchStone文件的导出及导入

目录 一、 T o u c h S t o n e 介绍 \color{#4285f4}{ \mathbf{ 一、TouchStone介绍}} 一、TouchStone介绍 二、文件导出、导入方式 \color{#4285f4}{ \mathbf{ 二、文件导出、导入方式}} 二、文件导出、导入方式1.原理图操作1)原理图中导出2.原理图中导入 3.DDW中…

Leetcode—796. 旋转字符串【简单】

2024每日刷题(132) Leetcode—796. 旋转字符串 实现代码 class Solution { public:bool rotateString(string s, string goal) {return ((s.length() goal.length()) && (s s).find(goal) ! string::npos);} };运行结果 之后我会持续更新&am…

蓝桥杯成绩已出

蓝桥杯的成绩早就已经出来了,虽然没有十分惊艳 ,但是对于最终的结果我是心满意足的,感谢各位的陪伴,关于蓝桥杯的刷题笔记我已经坚持更新了49篇,但是现在即将会告别一段落,人生即将进入下一个规划。我们一起…

3---Linux编译器gcc/g++

一、程序的翻译过程:ESc->iso 1.1预处理:c->c 主要功能:宏替换、头文件的展开、条件编译、去注释;目的是让代码变得纯粹。条件编译,可以实现对代码的裁剪。比如对于不同用户,设置不同的宏常量&…

【知识碎片】2024_05_10

每日代码 至少是其他数两倍的最大数 . - 力扣&#xff08;LeetCode&#xff09; int dominantIndex(int* nums, int numsSize) {int max_num 0;int next_max 0;int pos 0;for(int i 0; i < numsSize; i){if(nums[i] > max_num) {pos i;next_max max_num;max_num…

【Linux】简易进度条的实现

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

LeetCode算法题:7. 整数反转

给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输…

QML配合VTK基本实现

采用 QT5.15 VTK9.2.0 建立QT QUICK项目 部分方法来源于 QML加载VTK main.cpp #include <QGuiApplication> #include <QQmlApplicationEngine>#include <QQuickVTKRenderWindow.h> #include <QQuickVTKRenderItem.h> #include <vtkPolyDataMapp…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

百面算法工程师 | 传统图像处理——OpenCV

本文给大家带来的百面算法工程师是传统图像处理的面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们将介绍一些集几何变换和图像平滑处理&#xff0c;并提供参考的回答及其理论基础&…

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据&#xff0c;使用机器…

深入Android ViewModels:Dos和Don‘ts

深入Android ViewModels&#xff1a;Dos和Don’ts 若你正使用ViewModels&#xff0c;务记以下几点以提升代码质量。本系列文章深入探讨了利用Android ViewModels的最佳实践&#xff0c;强调必须遵循和避免的关键点&#xff0c;以提升代码质量。我们将讨论ViewModels在管理UI状…

HarmonyOS开发案例:【生活健康app之编写通用工具类】(5)

本节将介绍日志打印、时间换算等通用工具类的编写和使用&#xff0c;工具类可以简化应用代码编写和业务流程处理。 日志类 日志类Logger旨在提供一个全局的日志打印、日志管理的地方&#xff0c;既可以规范整个应用的日志打印&#xff0c;也方便日后对日志工具类进行修改&…

CV每日论文--2024.5.9

1、Tactile-Augmented Radiance Fields 中文标题&#xff1a;触觉增强的辐射场 简介&#xff1a;我们提出了一种新的场景表示方法,称为"触觉增强的辐射场(Tactile-Augmented Radiance Fields, TaRF)"。这种方法将视觉和触觉信息融合到一个共享的三维空间中。通过拍摄…

【Vue2】关于response返回数据的错误小记

关于Vue2中response返回数据的一个错误小记 如图&#xff0c;在这里返回的时候&#xff0c;后端是通过List< String >返回的&#xff0c;response接收到的实际上是一个Array数组&#xff0c;但是赋值给searchedTaskList的时候&#xff0c;需要在.then包括的范围里面赋值给…