python 求最小公倍数/最大公约数(2个数或者多个数的)

  • Post author:
  • Post category:python




2.最小公倍数/最大公约数





Type one: 2个数

"""
最大公约数
Author:Anderson
Time:2020-11-4
"""
def gcd(a,b):
    if a<b:
        a,b=b,a
    if a%b==0:
        return b
    else:
        return gcd(b,a%b)



思路分析:求两个数的最大公约数,可以用欧几里得算法(辗转相除法。)其基于的定理是:两个数的最大公约数等于较小的那个数和这两个数相除的余数的最大公约数

"""
最小公倍数
Author:Anderson
Time:2020-11-4
"""
def lcm(a, b):
    if a * b == 0:
        return 0
    else:
        return int(a * b / gcd(a, b))



这里用了计算公式 lcm(a,b)=a

b/gcd(a,b)

*





Type two: 多个数

"""
最大公约数
Author:Anderson
Time:2020-11-4
"""
def gcd2(*args):
    res=gcd(gcd(args[0],args[1]))
    for i in range(2,len(args)):
        res=gcd(res,args[i])
    return res

#思路分析:
gcd(a,b,c)=gcd(gcd(a,b),c)


"""
最小公倍数
Author:Anderson
Time:2020-11-4
"""
def lcm2(*args):
    res=lcm(args[0],args[1])
    for i in range(2,len(args)):
        res=lcm(res,args[i])
    return res

#*args是指输入的数据类型是tuple



版权声明:本文为anderson13原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。