第1关:最小公倍数算法

  • 编写一个能计算给定的所有正整数的最小公倍数的小程序。

相关知识

  • 为了完成本关任务,你需要掌握:
  1. 如何求任意两个正整数的最大公约数;
  2. 如何求任意两个正整数的最小公倍数。
  3. 如何求任意两个正整数的最大公约数
  • 最大公约数(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
  • 其实在古代就有能求解出最大公约数的算法了,《九章算术》是中国古代的数学专著,其中的“更相减损术”就可以用来求两个数的最大公约数,原文是:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”大致所描述的算法步骤是:
  1. 任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步;
  2. 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止;
  3. 第一步中约掉的若干个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关:最小公倍数算法相关推荐

  1. 【学习笔记】30、Python基础综合练习

    Python基础综合练习 [综合习题] 设计一个MySQL数据库操作的类,可以实现数据库的各种操作(增删改查). 创建类源代码: # 创建MySQL数据库操作的类 class Mysql_opeati ...

  2. python基础教程第三版豆瓣-数据结构与算法必读书单吐血整理推荐【附网盘链接】...

    前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...

  3. 【数据分析】python基础必修3—条件语句/运算符/真假值/循环/算法练习

    目录 1.条件语句 ​2.运算符 2.1成员运算符 2.2逻辑运算符 3.真假值的判断 4.身份运算符 5.循环 5.1while循环 5.2for循环 5.3循环的中断 5.4循环算法练习:冒泡排序 ...

  4. Python基础综合练习

    # coding=utf-8 import turtle# 画五角星的方法 def drawPentagram(x):turtle.begin_fill()turtle.color('yellow') ...

  5. b站黑马程序员python基础学习

    python的安装 第一个python程序 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python 解释器 我们可以将代码,写入一个以".p ...

  6. python基础语法 第0关print-温州文成高校邦数据科学通识课【Python基础语法】答案...

    温州文成高校邦数据科学通识课[Python基础语法]答案it8p 温州文成高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:网课,智慧树,知到,超星,尔雅,学习通 ...

  7. 小白都能学会的Python基础 第五讲:综合实战1 - 商业实战之德勤笔试题

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第五讲:综合实战1 - 商业实战之德勤笔试题 1.德勤笔试题分析 2.笔试题讲解 3.课程相关资源 第五讲:综合实 ...

  8. 八、Python基础(综合演练:飞机大战)

    八.Python基础(综合演练:飞机大战) 目录: 八.Python基础(综合演练:飞机大战) 一.模块 1.利用 pip 安装 pygame 模块 2.图片素材下载 二.pygame 模块初识 1. ...

  9. 小白都能学会的Python基础 第六讲:综合实战2 - 大数据分词与词云图绘制

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第六讲:综合实战2 - 大数据分词与词云图绘制 1.大数据分词技巧 2.词频统计技巧 3.词云图绘制 4.微博词云 ...

最新文章

  1. 找到那些氪金大佬,然后榨干他们丨AIの特殊技能
  2. php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
  3. python怎么用数据修改,如何更改数据框Python中的值
  4. xp上vs2010+IE8无法调试脚本
  5. java开发和python哪个好学_学编程,Python和Java哪个更好?
  6. 如何通过简单的配置,实现SAP Spartacus的guest checkout需求
  7. 计算机组成原理 参考,计算机组成原理参考练习
  8. Tableau Desktop
  9. 网页边框和网页文字阴影
  10. 将深度缓冲z值变换到相机坐标系
  11. python列表keys函数_字典常用函数(clear、get、items、keys、values、pop)
  12. 【Java】Java调用shell脚本
  13. 微服务SpringCloud中的负载均衡,你都会么?
  14. AI电子宠物Vector,会跑会动会聊天,一天内火遍美国科技圈
  15. mysql5.5 vsftpd_vsftpd-2.0.5+mysql-5.5+pam_mysql构建虚拟用户访问
  16. 【爬虫】selenium动态页面请求与模拟登录知乎
  17. [转载]安全设置 IIS 中的权限
  18. 5个不可多得的PPT小技巧,工作再忙也要学习!
  19. CSS颜色代码,二进制颜色代码
  20. 大数据定价方法的国内外研究综述及对比分析

热门文章

  1. calloc()和realloc()的用法详解
  2. TDengine下载安装以及Unable to resolve FQDN解决还有Java配置
  3. 我是如何从学渣成为程序员的
  4. 国际高级护理实践的发展
  5. ROS系统学习2---ROS最小系统的制作
  6. 算法面试题: 斐波那契数列
  7. 机器学习-决策树之回归树python实战(预测泰坦尼克号幸存情况)(三)
  8. 基于网络的虚拟仪器测试系统
  9. STM32 F4 OV2640摄像头学习笔记(二)
  10. C++输入输出:iostream还是cstdio?