1.贴题

题目来自PythonTip
逆解最大公约数与最小公倍数


我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。注:所给数据都有解,不用考虑无解的情况。

例如:a=3, b = 60

则输出:12 15


2.说明

一开始想要暴力破解,后来发现暴力破解也不是很简单,所以就投机取巧想着利用现成的函数。

3.参考代码

python3版本

import math #导入math库以便使用最大公约数函数gcd
c = min(a,b) #取ab中小的数即为最大公约数
d = max(a,b) #取ab中大的数即为最小公倍数
flag = False #预先将flag置为False
for i in range(c,d+1): #外层循环ifor j in range(c,d+1): #内层循环jif math.gcd(i,j) == c and i*j/c==d and j%i != 0: #如果ij的最大公约数为c且最小公倍数为d且ij互质print(i,j) #则说明找到了将其打印flag = True #将flag置为Truebreak #跳出内层循环if flag: #检验flag,假继续循环,真跳出外层循环break

python2版本

from fractions import gcd
c = min(a,b)
d = max(a,b)
flag = False
for i in range(c,d+1):for j in range(c,d+1):if gcd(i,j) == c and i*j/c==d and j%i != 0:print i,jflag = Truebreakif flag:break

4.优化代码

虽然上面的代码通过了平台的测试,但是看了人家的代码之后发现上面的代码还是有问题的。因此结合人家的思路修改优化了代码。

import math
c = min(a,b)
d = max(a,b)
l = [] #增加一个列表l用于存放所有满足条件的数组
for i in range(c,d+1):for j in range(c,d+1):if math.gcd(i,j) == c and i*j/c==d: #删去互质条件因为两数不需要互质l.append((i,j)) #如果满足条件,将两数打包为tuple添加到l列表
l.sort(key = lambda x:x[0]+x[1]) #使用两数之和作为key对l中的元素进行排序,默认为升序因此排序后第一组数据为所求的
print(" ".join(map(str,l[0]))) #将第一组数据以空格连接输出

5.其他写法

聚焦不同因数项法 来自blueauris(python2写法)

import math
def gcd(p,q):p,q = (p,q) if (p > q) else(q,p)while(p%q!=0):p,q = q,p%qreturn qa,b = (a,b) if a<b else (b,a)
diff=b/a
uper = int(math.sqrt(diff)) +1
XYList=[(i,diff/i) for i in range(uper, 0,-1) if diff%i ==0] #求所有因数
XYList =[i for i in XYList if gcd(i[0],i[1])==1]#去除非互质项
XYList.sort(cmp = lambda it1,it2:(it1[0]+it1[1])<(it2[0]+it2[1]) ) #排序,使第一项和最小
x,y=XYList[0]
x,y = (x*a,y*a) if x<y else(y*a,x*a)
print x,y

6.总结

拓展知识
因为数学知识不太扎实,还特意去百度查了一下最大公约数和最小公倍数的关系。
前面的解题文章python之最小公倍数 中已经提到
最小公倍数 = 两数乘积/最大公约数

而作业帮的这个解答知道二个数的最小公倍数和最大公约数怎么求这二个数 讲得更深刻一些

知道最大公约数,说明这两数都是最大公约数的倍数,而且全部公有质因数提取出来连乘,所得的积就是这两个数的最大公约数.最小公倍数是全部公有的质因数和独有的质因数乘积.而且这两个数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积.
以上题为例:设两数分别为x ,y .由于这两数的最大公约数是7,即全部公有的质因数积为7,又最小公倍数为84,则独有的质因数积为84/7=12=4*3.又xy=7*84,则x=28 ,y=21或x=21,y=28

python之逆解最大公约数与最小公倍数相关推荐

  1. python实现辗转相除法求最大公约数和最小公倍数

    辗转相除法数学原理 辗转相除法也称欧几里得算法,是用来求两个正整数的最大公约数的算法.接下来我们用实例来解释一下.假如我们需要求12和21的最大公约数,用辗转相除法是这样实现的: 21 / 12 = ...

  2. 最大公约数和最小公倍数python代码_python求最大公约数和最小公倍数的简单方法...

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  3. PYTHON语言编写求最大公约数和最小公倍数的程序(更相减损法)

    #更相减损术求GCD.py x,y=eval(input("请输入一个整数:")) t1,t2=x,y while True:a=abs(x-y)if a==min(x,y):br ...

  4. python中求最小公约数,python求最大公约数和最小公倍数的简单方法

    python求最大公约数和最小公倍数的简单方法 python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于 ...

  5. python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析

    简介 求最大公约数和最小公倍数可能是编程中最常见的几个基本问题了.因为他们的基本概念基本上很早的时候就知道了,对他们的求法和他们之间的关系都比较有意思. 基本的数学性质 先从最大公约数这一部分开始吧. ...

  6. python计算最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  7. python最大公约数和最小公倍数

    辗转相除法 最大公约数和最小公倍数的求解方法有很多种,但是我们普遍认为辗转相除法是最好的.辗转相除法的步骤如下: 比较两数,并使m>n: 将m作被除数,n做除数,相除后余数为r: 循环判断r,若 ...

  8. python求两数最大公因数_『用python求俩个数的最大公约数和最小公倍数』

    python:用递归的方法编写一个函数gys(x,y),计算两个数字的最大公约数. (提示,大的 def gys(x,y): a,b=max(x,y),min(x,y) c=a%b if c==0: ...

  9. python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

最新文章

  1. Microsoft Anti-Cross Site Scripting Library V1.5 发布了
  2. 计算机会计的应用控制主要有哪些,计算机会计习题全多选
  3. 国家智能计算机研究开发中心 地址,油藏数值模拟-国家智能计算机研究开发中心.PDF...
  4. 想避免宕机,数据中心运营商还要不断演练实践
  5. 网络安全对现在乃至以后,对人们的安全有着重大的保障
  6. delphi编码规范文档
  7. matplotlib markers的类型
  8. 金叉成功率_一个非常强烈的买卖信号:三金叉见顶,三死叉见底,短短10字,但是成功率却远超“金叉买,死叉卖”...
  9. js打印到控制台_前端JS,8个问题测试你真的懂吗(高频面试题,附答案)
  10. 基于群晖DS216+II的家庭存储解决方案
  11. HTML+CSS实现登陆界面
  12. 2015-2018节假日表
  13. Web表单设计:表单结构
  14. 如何用电脑玩石器时代M 石器时代M手游PC电脑版教程
  15. 企业数据资产管理:数据资产目录应该如何规划
  16. RV32I 基本指令集汇编解析
  17. linux基础 linux命令跟踪 strace命令
  18. Top 10 Performance Problems taken from Zappos, Monster, Thomson and Co
  19. mysql数据库查询余额_MySQL 数据库(三):查
  20. 江苏省事业单位计算机入面分数线,江苏事业单位进面分数线一览!进面名单有你吗...

热门文章

  1. 【软件工程1916|W(福州大学)_助教博客】团队第四次作业(第7次)成绩公示...
  2. 电池的几何形状和标准尺寸
  3. java基础:网络编程(一)简介
  4. 手机app+esp8266控制小区大门门锁,实现远程开门
  5. docker报错:WSL 2 installation is incomplete
  6. 二、三级等保建议安全设备及其主要依据(毫无保留版)
  7. 浅谈PLC电力线载波技术
  8. 微商利用淘宝评价怎么引流?如何利用淘宝买低价产品刷评价引流?
  9. 教育科研先进个人发言稿
  10. jenkins安装和配置(二):配置第一个项目