R7-4 多个数的最小公倍数分数 10

全屏浏览题目
切换布局
作者 usx程序设计类课程组
单位 绍兴文理学院
两个整数公有的倍数称为它们的公倍数,其中最小的一个正整数称为它们两个的最小公倍数。当然,n个数也可以有最小公倍数,例如:5,7,15的最小公倍数是105。
输入n个数,请计算它们的最小公倍数。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试先输入一个整数n(2≤n≤20),再输入n个正整数(属于[1,100000]范围内)。这里保证最终的结果在int型范围内。
输出格式:
对于每组测试,输出n个整数的最小公倍数。
输入样例:
3
3 5 7 15
5 1 2 4 3 5
8 7 15 12 3 4 6 4 9
输出样例:
105
60
1260

最后一个例子给错了吧?1260不是8的倍数。

from functools import reduce

def gys(a, b):
    if b == 0: return a
    return gys(b, a%b)

def gbs(a, b):
    return int(a*b / gys(a, b))

T = int(input())
res = []
for i in range(T):
    nums = input().split()
    nums = [int(i) for i in nums]
    res.append(reduce(gbs,nums))
for i in res:
    print(i)

结果如下:

3
3 5 7 15
5 1 2 4 3 5
8 7 15 12 3 4 6 4 9
105
60
2520

只用内置函数的基础解法如下:

n = int(input())
nums = []
for _ in range(n):
    nums.append(list(map(int,(input().split()))))

for num in nums:
    i,j = max(num),min(num)
    r = True
    while r:
        r = not all([i % k == 0 for k in num])
        i += j
    print(i-j)


'''--result:
3
3 5 7 15
5 1 2 4 3 5
8 7 15 12 3 4 6 4 9
105
60
2520
'''