Python基础综合练习1——第1关:最小公倍数算法
第1关:最小公倍数算法
- 编写一个能计算给定的所有正整数的最小公倍数的小程序。
相关知识
- 为了完成本关任务,你需要掌握:
- 如何求任意两个正整数的最大公约数;
- 如何求任意两个正整数的最小公倍数。
- 如何求任意两个正整数的最大公约数
- 最大公约数(GCD, Greatest Common Divisor),也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。
比如数12和数18的最大公约数是6,因为12的约数有1、2、3、4、6、12,而18的约数有1、2、3、6、9、18,通过比较,显然6是数12和数18的最大公约数。
- 通过上述过程,显然我们可以通过枚举这两个数的所有约数,考虑这两个数共有的约数,然后选择最大的就是这两个数的最大公约数。因为一个数的约数必然是不大于该数的,所以我们可以通过枚举不超过这两个数中的最大者的正整数,来达到上述效果,具体代码如下述所示:
def gcd_1(x, y):ed = max(x, y)+1divisor = 1for i in range(2, ed):if x % i == 0 and y % i == 0:divisor = ireturn divisor
- 其实在古代就有能求解出最大公约数的算法了,《九章算术》是中国古代的数学专著,其中的“更相减损术”就可以用来求两个数的最大公约数,原文是:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”大致所描述的算法步骤是:
- 任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步;
- 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止;
- 第一步中约掉的若干个2与第二步中最后得到的差(或减数)的乘积就是所求的最大公约数。
- 实际编程中,我们可以省略第一步,这样第二步最后得到的差(或减数)就是这两个数的最大公约数,其具体实现如下述代码所示:
def gcd_2(x, y):while True:if x < y:x, y = y, xelif x == y:return xx -= y
- 尽管前面已经介绍了两种求最大公约数的方法,但实际生活中,我们更倾向于使用辗转相除法,来求解任意两个正整数的最大公约数,以求解30和12的最大公约数为例,按gcd_2代码,其过程为:
30 - 12 = 18 -> 18 - 12 = 6 -> 12 - 6 = 6
- 最后因为减数和差相等,即6 - 6 = 0,故6就是30和12的最大公约数,仔细观察上述过程,我们可以发现第一步和第二步实际上就是被减数30减了2次12,然后在第三步,用上次计算的余数6继续与12进行比较。显然,我们可以通过整数求余运算,直接一步求得30和12的余数6,此时余数绝对是比除数小的,那么则将除数代替被除数的位置,余数代替除数的位置,然后重复上述过程,直至余数为0,那么此时的除数就是原来两个数的最大公约数了。上述过程用递归方式实现的话,代码是非常简短的,具体代码如下:
def gcd(x, y):return x if y == 0 else gcd(y, x%y)
最后,推荐大家也去实现下求解任意两正整数的最大公约数的非递归版本。
如何求任意两个正整数的最小公倍数
- 几个数共有的倍数叫做这几个数的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数(LCM,Least Common Multiple)。
- 如3和7的最小公倍数是21,因为不存在一个比21还小的正整数,既是3的倍数,也是7的倍数。
- 显然对任意两个正整数a和b,a*b必是他们的公倍数。假设g为a和b的最大公约数,那么a、b可以分别写成一个正整数与他们最大公约数的乘积的形式,即a = p * g,b = q * g。那么显然c = p * q * g,是a和b的一个公倍数,而且是最小公倍数。因为p和q必定不共有大于1的公约数,所以若减小p、q、g这三个任意一个数的话,都不能使其乘积还是a和b的倍数。
编程要求
计算并输出给定的所有正整数的最小公倍数,参数x为整数列表。
测试输入:
1,2,3,4,5
预期输出:
60
测试输入:
15,25,20
预期输出:
300
上代码:
如果注释理解有误,请大佬们多多评论指教!!
Python基础综合练习1——第1关:最小公倍数算法相关推荐
- 【学习笔记】30、Python基础综合练习
Python基础综合练习 [综合习题] 设计一个MySQL数据库操作的类,可以实现数据库的各种操作(增删改查). 创建类源代码: # 创建MySQL数据库操作的类 class Mysql_opeati ...
- python基础教程第三版豆瓣-数据结构与算法必读书单吐血整理推荐【附网盘链接】...
前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...
- 【数据分析】python基础必修3—条件语句/运算符/真假值/循环/算法练习
目录 1.条件语句 2.运算符 2.1成员运算符 2.2逻辑运算符 3.真假值的判断 4.身份运算符 5.循环 5.1while循环 5.2for循环 5.3循环的中断 5.4循环算法练习:冒泡排序 ...
- Python基础综合练习
# coding=utf-8 import turtle# 画五角星的方法 def drawPentagram(x):turtle.begin_fill()turtle.color('yellow') ...
- b站黑马程序员python基础学习
python的安装 第一个python程序 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python 解释器 我们可以将代码,写入一个以".p ...
- python基础语法 第0关print-温州文成高校邦数据科学通识课【Python基础语法】答案...
温州文成高校邦数据科学通识课[Python基础语法]答案it8p 温州文成高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:网课,智慧树,知到,超星,尔雅,学习通 ...
- 小白都能学会的Python基础 第五讲:综合实战1 - 商业实战之德勤笔试题
1.华小智系列 - Python基础(案例版) <Python基础>目录 第五讲:综合实战1 - 商业实战之德勤笔试题 1.德勤笔试题分析 2.笔试题讲解 3.课程相关资源 第五讲:综合实 ...
- 八、Python基础(综合演练:飞机大战)
八.Python基础(综合演练:飞机大战) 目录: 八.Python基础(综合演练:飞机大战) 一.模块 1.利用 pip 安装 pygame 模块 2.图片素材下载 二.pygame 模块初识 1. ...
- 小白都能学会的Python基础 第六讲:综合实战2 - 大数据分词与词云图绘制
1.华小智系列 - Python基础(案例版) <Python基础>目录 第六讲:综合实战2 - 大数据分词与词云图绘制 1.大数据分词技巧 2.词频统计技巧 3.词云图绘制 4.微博词云 ...
最新文章
- 找到那些氪金大佬,然后榨干他们丨AIの特殊技能
- php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
- python怎么用数据修改,如何更改数据框Python中的值
- xp上vs2010+IE8无法调试脚本
- java开发和python哪个好学_学编程,Python和Java哪个更好?
- 如何通过简单的配置,实现SAP Spartacus的guest checkout需求
- 计算机组成原理 参考,计算机组成原理参考练习
- Tableau Desktop
- 网页边框和网页文字阴影
- 将深度缓冲z值变换到相机坐标系
- python列表keys函数_字典常用函数(clear、get、items、keys、values、pop)
- 【Java】Java调用shell脚本
- 微服务SpringCloud中的负载均衡,你都会么?
- AI电子宠物Vector,会跑会动会聊天,一天内火遍美国科技圈
- mysql5.5 vsftpd_vsftpd-2.0.5+mysql-5.5+pam_mysql构建虚拟用户访问
- 【爬虫】selenium动态页面请求与模拟登录知乎
- [转载]安全设置 IIS 中的权限
- 5个不可多得的PPT小技巧,工作再忙也要学习!
- CSS颜色代码,二进制颜色代码
- 大数据定价方法的国内外研究综述及对比分析