1.贴题
题目来自PythonTip
最小公倍数
关于最大公约数请查看博文 python之最大公约数
给你两个正整数a和b, 输出它们的最小公倍数。
例如:a = 3, b = 5
则输出:15
2.说明
按部就班法,从大的那个数(理论上,实际可以从任意一个数或者从正整数开始)开始一个个验证是否可以同时整除a和b,如果找到则跳出循环,没找到则加一继续找。
3.参考代码
c = a
while True:
if c%a == 0 and c%b == 0:
print(c)
break
c += 1
4.其他写法
两数之积除以两数的最大公约数
print('%d'%(a*b/[x for x in range(1,a+1) if a%x==0 and b%x ==0][-1]))
上面代码的函数写法
def gcd(a,b):
if a < b:
temp = b
b = a
a = temp
remainder = a % b
if remainder == 0:
return b
else:
return gcd(remainder,b)
def gys(a,b):
remainder = gcd(a,b)
print(a*b/remainder)
gys(a,b)
找两数差距法
ma=max(a,b)
mi=min(a,b)
for i in range(1,mi+1):
if ma*i%mi==0:
print(ma*i)
break
5.后记
这类题要么直接使用公式,要么使用按部就班的笨办法去解。
写完博文后又突发奇想,是不是python已经有函数实现直接求最大公约数和最小公倍数了?
查了下资料发现最大公约数是有函数的,而且有两个。最小公倍数虽然没有,但是可以通过上面代码的方式利用函数。
math库的函数
import math #导入math库
print(math.gcd(a,b)) #利用函数求解最大公约数
print(a*b/math.gcd(a,b)) #利用上面的函数求解最小公倍数
python2好像math库里没有这个函数,要用fraction库里的函数
from fractions import gcd #导入函数
print(gcd(a,b))
print(a*b/gcd(a,b))