python之最小公倍数

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 #导入mathprint(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))

猜你喜欢

转载自blog.csdn.net/weixin_41980474/article/details/80139275