📌  相关文章
📜  QA – 安置测验|数字、LCM 和 HCF |问题 4(1)

📅  最后修改于: 2023-12-03 14:46:49.311000             🧑  作者: Mango

QA – 安置测验 | 数字、LCM 和 HCF | 问题 4

问题描述

给定一组数字,请编写一个 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() 函数,它可以直接计算任意多个数的最大公因数。

解题步骤
  1. 定义一个变量 result,初始值为列表中的第一个数。
  2. 遍历列表中的每一个数,将其与 result 求最大公因数,并将结果保存到 result 中。
  3. 如果 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