Python求最大公约数或者最小公倍数
不限于多少个数,一个,两个,多个都行
# -*- coding:utf-8 -*-
# @FileName :0421.py
# @DateTime :2022/04/21 11:29
# @Author :wanglb
# 最大公约数和最小公倍数
from functools import reduce
def gcd2(num1, num2):
# 两个数的最大公约数
# 如果有一个数字是0, 则返回另外一个
if not (num1 and num2):
return num1 or num2
if num1 < num2:
num1, num2 = num2, num1
if n := num1 % num2:
return gcd2(num2, n)
else:
return num2
def gcd(*args):
# 最大公约数
# 如果没有参数,则返回0
if (length := len(args)) == 0:
return 0
# 如果只有一个参数, 则返回它的绝对值
elif length == 1:
return abs(args[0])
elif length == 2:
return gcd2(*args)
else:
return gcd(gcd2(args[0], args[1]), args[2:])
def lcm(*args):
# 最小公倍数
# 如果没有参数,则返回1
if (length := len(args)) == 0:
return 1
# 如果只有一个参数, 则返回它的绝对值
elif length == 1:
return abs(args[0])
else:
# 如果参数包含0,则返回0
if 0 in args:
return 0
else:
return reduce(lambda x, y: x * y, list(args)) / gcd(*args)