使用Python求解最小公倍数与最大公约数
问题描述:
给定两个正整数,求它们的最大公约数和最小公倍数。
提高要求:
三个以上数的求解。
解题思路:
对于这个问题,求最大 公约数的算法有很多,例如:穷举法,即传进来两个数,选择最小的那个数,作为 最开始的最大公约数,向下穷举,知道都可以被整除为止,但是这种算法太笨拙。还有欧几里得算法,辗转相除。我采用的算法公式: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求解最小公倍数与最大公约数相关推荐
- Python求最小公倍数和最大公约数(附加辗转相除)
求两个正整数 a,b 的最大公因数与最小公倍数.两个数的最大公因数指的是 a,b 共有的约数中最大的一个.两个数的最小公倍数指的是 a,b 共有的倍数中最小的一个. 输入格式: 在一行中给出两个数字 ...
- python最小公倍数 菜鸟_Python实现的求解最小公倍数算法示例
本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具体如下: 简单分析了一下,前面介绍的最大公约数的求解方法跟最小公倍数求解方法类似,只需要改一个简单的条件,然后做一点简单的其 ...
- python求最小公倍数_Python实现的求解最小公倍数算法示例
这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...
- python中最小公倍数函数_Python实现的求解最小公倍数算法示例
这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...
- 最大公约数python语言算法_使用Python求解最大公约数的实现方法
这篇文章主要介绍了使用Python求解最大公约数的实现方法,包括用Python表示欧几里得算法和Stein算法的求解原理. 1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的 ...
- python最大公约数计算_使用Python求解最大公约数的实现方法
1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数.其计算原理依赖于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 证明: a可以表示 ...
- python之逆解最大公约数与最小公倍数
1.贴题 题目来自PythonTip 逆解最大公约数与最小公倍数 我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数.今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公 ...
- [c语言]最小公倍数和最大公约数(详细步骤求解)
[c语言]最小公倍数和最大公约数(详细步骤求解) 1.(求解前需知) 假定你有两个数a,b.首先,你需要了解的是 a*b=两者的最大公约数 * 最小公倍数. 也就是说你只要求解出其中一个,就可以得到另 ...
- python之最小公倍数
1.贴题 题目来自PythonTip 最小公倍数 关于最大公约数请查看博文 python之最大公约数 给你两个正整数a和b, 输出它们的最小公倍数. 例如:a = 3, b = 5 则输出:15 2. ...
最新文章
- 14年12月CCF真题4-最优灌溉
- 模块式lamp fpm式lamp
- JSF简单Ajax示例
- 数组(Array)的常用方法
- oracle清空数据库命令行,使用命令行手动卸载Oracle Database 11gR2
- Spring Boot工程在IDEA中运行报错
- android 相机权限_暴力破姐权限,吹爆这款软件...
- 一个拨号上网的批处理文件
- WPS简历模板的图标怎么修改_最新8000套设计师面试作品集:模板+插画+海报+图标+简历...
- php居民小区物业水电费管理系统mysql
- Unity3D 游戏摄像机的环绕与拉近
- MQTT Essentials(Basics(1-5) And Features(6-10))
- upc2021个人训练赛第23场M: 紫罗兰(dsu)
- 消除无法用内置管理账户打开sticky notes
- html win10虚拟键盘,笔记本电脑win10虚拟键盘打开的方法
- 机器视觉工程师应该知道的23个工业镜头专业术语
- 集群和均衡负载[摘]
- react利用react-activation实现子路由缓存
- Node.js 字体格式转换 ttf2eot ttf2woff ttf2svg
- 利用P2P技术做自有视频点播系统的加速,还需要和CDN一样部署很多服务器吗?