📅  最后修改于: 2023-12-03 14:46:49.311000             🧑  作者: Mango
给定一组数字,请编写一个 Python 函数,判断这些数字是否存在公共因子。
您需要实现一个名为 has_common_factor()
的函数。该函数应接受一个整数列表作为输入,并返回一个布尔值,指示它们是否存在公共因子。如果它们存在公共因子,则返回 True;否则,返回 False。
has_common_factor([2, 4, 6, 8]) => True
has_common_factor([2, 3, 5]) => False
has_common_factor([27, 63, 81]) => True
要判断一组数字是否存在公共因子,可以借助数学中的最大公因数 (HCF) 的概念。
如果数 a 和 b 的最大公因数为 x,则表示 a 和 b 都可以被 x 整除。同时,x 也是 a 和 b 的所有因子中最大的那个。
对于多个数的情况,我们可以使用类似 “分治” 的思路。即,我们可以依次求出每两个数之间的最大公因数,然后将这个最大公因数再与后面的数求最大公因数,以此类推。如果最终的最大公因数为 1,则说明这组数字中不存在公共因子。如果最终的最大公因数大于 1,则说明它们存在公共因子。
需要注意的是,求两个数之间的最大公因数可以使用辗转相除法。不过这里我们使用 math.gcd()
函数,它可以直接计算任意多个数的最大公因数。
result
,初始值为列表中的第一个数。result
求最大公因数,并将结果保存到 result
中。result
大于 1,则说明列表中存在公共因子,返回 True;否则,返回 False。import math
def has_common_factor(nums):
result = nums[0]
for num in nums[1:]:
result = math.gcd(result, num)
if result == 1:
return False
return True
>>> has_common_factor([2, 4, 6, 8])
True
>>> has_common_factor([2, 3, 5])
False
>>> has_common_factor([27, 63, 81])
True