问题描述:

给定两个正整数,求它们的最大公约数和最小公倍数。

提高要求:

三个以上数的求解。

解题思路:

对于这个问题,求最大 公约数的算法有很多,例如:穷举法,即传进来两个数,选择最小的那个数,作为 最开始的最大公约数,向下穷举,知道都可以被整除为止,但是这种算法太笨拙。还有欧几里得算法,辗转相除。我采用的算法公式:gcd(a, b) = gcd(b, a%b),前提条件是a>b,即保证大数在前。最小公平倍数的公式为:a*b/gcd(a,b)。有了这个公式就可以进行计算求解,对于三个以上的数求解,利用穷举法可以求得,但是效率慢了很多, 但是在条件控制上优化一下,还是可以的。我这次试用python编写,原因大家一看便知:

求解最大公约数的代码:

def gcd(x, y):"""欧几里得算法求解两个数的最大公约数:param x: 第一个数:param y: 第二个数:return: 最大公约数"""# 保证大数在前if y > x:x, y = y, xif y == 0:return x# 递归递归调用,公式为: gcd(a, b) = gcd(b, a % b){a > b}return gcd(y, x % y)

非常简洁的代码,交换两个值再也不用第三个变量了。

求解最小公平倍数的代码:

def lcm(x, y):"""计算两个数的最小公倍数:param x: 第一个数:param y: 第二个数:return: 最小公倍数"""# 公式: a, b两个数的最小公倍数等于a*b除以a,b的最大公约数return int(x*y/gcd(x, y))

三个以上的数的求解函数:

def gcd_lcm(*x):"""穷举法计算最小公倍数与最大公约数:param x: 不定长参数:return:"""num = []flag, gcd_, lcm_ = 1, 1, 1for i in x:num.append(i)# 计算这一组数中的乘积,即最大公倍数lcm_ *= i# 计算这组数中的最大最小值max_, min_ = max(num), min(num)# 穷举计算最大公约数:while min_ > 0:for x in num:if x % min_ == 0:flag = 1# 当前值与待定的公因数的余数不等于0else:# 判断的标志设为0,并且不继续往下验证其他的数,进行下一个公因数验证flag = 0breakif flag == 1:gcd_ = min_breakmin_ -= 1# 穷举计算最小公倍数, 原理类似最大公因数的求解while max_ <= lcm_:for y in num:if max_ % y == 0:flag = 1else:flag = 0breakif flag == 1:lcm_ = max_breakmax_ += 1return gcd_, lcm_

运行与调试结果:

断点调试查看变量的值的变化:

三个以上的数的计算结果:

输入:3,15,18

结果为:最大公因数,最小公倍数 = 3, 90

使用Python求解最小公倍数与最大公约数相关推荐

  1. Python求最小公倍数和最大公约数(附加辗转相除)

    求两个正整数 a,b 的最大公因数与最小公倍数.两个数的最大公因数指的是 a,b 共有的约数中最大的一个.两个数的最小公倍数指的是 a,b 共有的倍数中最小的一个. 输入格式: 在一行中给出两个数字 ...

  2. python最小公倍数 菜鸟_Python实现的求解最小公倍数算法示例

    本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具体如下: 简单分析了一下,前面介绍的最大公约数的求解方法跟最小公倍数求解方法类似,只需要改一个简单的条件,然后做一点简单的其 ...

  3. python求最小公倍数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  4. python中最小公倍数函数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  5. 最大公约数python语言算法_使用Python求解最大公约数的实现方法

    这篇文章主要介绍了使用Python求解最大公约数的实现方法,包括用Python表示欧几里得算法和Stein算法的求解原理. 1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的 ...

  6. python最大公约数计算_使用Python求解最大公约数的实现方法

    1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数.其计算原理依赖于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 证明: a可以表示 ...

  7. python之逆解最大公约数与最小公倍数

    1.贴题 题目来自PythonTip 逆解最大公约数与最小公倍数 我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数.今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公 ...

  8. [c语言]最小公倍数和最大公约数(详细步骤求解)

    [c语言]最小公倍数和最大公约数(详细步骤求解) 1.(求解前需知) 假定你有两个数a,b.首先,你需要了解的是 a*b=两者的最大公约数 * 最小公倍数. 也就是说你只要求解出其中一个,就可以得到另 ...

  9. python之最小公倍数

    1.贴题 题目来自PythonTip 最小公倍数 关于最大公约数请查看博文 python之最大公约数 给你两个正整数a和b, 输出它们的最小公倍数. 例如:a = 3, b = 5 则输出:15 2. ...

最新文章

  1. 14年12月CCF真题4-最优灌溉
  2. 模块式lamp fpm式lamp
  3. JSF简单Ajax示例
  4. 数组(Array)的常用方法
  5. oracle清空数据库命令行,使用命令行手动卸载Oracle Database 11gR2
  6. Spring Boot工程在IDEA中运行报错
  7. android 相机权限_暴力破姐权限,吹爆这款软件...
  8. 一个拨号上网的批处理文件
  9. WPS简历模板的图标怎么修改_最新8000套设计师面试作品集:模板+插画+海报+图标+简历...
  10. php居民小区物业水电费管理系统mysql
  11. Unity3D 游戏摄像机的环绕与拉近
  12. MQTT Essentials(Basics(1-5) And Features(6-10))
  13. upc2021个人训练赛第23场M: 紫罗兰(dsu)
  14. 消除无法用内置管理账户打开sticky notes
  15. html win10虚拟键盘,笔记本电脑win10虚拟键盘打开的方法
  16. 机器视觉工程师应该知道的23个工业镜头专业术语
  17. 集群和均衡负载[摘]
  18. react利用react-activation实现子路由缓存
  19. Node.js 字体格式转换 ttf2eot ttf2woff ttf2svg
  20. 利用P2P技术做自有视频点播系统的加速,还需要和CDN一样部署很多服务器吗?

热门文章

  1. 设计师该如何成功地交付设计成果?
  2. xcode 下载地址 (复制粘贴到迅雷里面就可以了,最好买个几小时的迅雷会员这样快些)
  3. 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)
  4. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)
  5. ros使用遇到的问题与解决方案
  6. 【TARS】网关TarsGateway
  7. Latex中使用技巧02:双击PDF跳转到原文对应位置
  8. 图与网络可视化实战(matlab实现)
  9. Hbuilder ios证书申请
  10. python如何把二进制转文本_Python:将二进制字符串转换为文本文件