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

📅  最后修改于: 2023-12-03 15:19:37.728000             🧑  作者: Mango

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

题目描述

给定一个整数数组,找到其中两个数的最大公约数为 1 且乘积最大。

输入

一个整数数组

输出

两个数的乘积

示例

输入: [2, 3, 4, 5]

输出: 15

解释

2 和 3 的最大公约数为 1,乘积为 6

2 和 5 的最大公约数为 1,乘积为 10

3 和 5 的最大公约数为 1,乘积为 15

因此,返回 15

解题思路
  1. 首先遍历整数数组,找到其中所有两个数字的组合。
  2. 对于每一组数字,计算它们的最大公约数。如果最大公约数为 1,则计算它们的乘积,并与当前最大乘积比较,更新最大乘积。
  3. 最后返回最大乘积。
代码实现
def find_max_product(nums):
    max_product = -1
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            if gcd(nums[i], nums[j]) == 1:
                product = nums[i] * nums[j]
                max_product = max(max_product, product)
    return max_product

def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)
复杂度分析

时间复杂度:$O(n^2)$,其中 n 是整数数组的长度。遍历整数数组需要 $O(n)$ 的时间,对于每一个数字组合,计算它们的最大公约数需要 $O(\log \min(a,b))$ 的时间,最坏情况下是 $O(\log n)$,因此总时间复杂度是 $O(n^2 \log n)$。

空间复杂度:$O(1)$,这里只用到常数级别的额外空间。