📌  相关文章
📜  数组中除 1 和数字本身之外的每个元素的最大除数(1)

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

数组中除 1 和数字本身之外的每个元素的最大除数

这个题目要求我们对一个给定的数组中,对于每个元素,找出除 1 和数字本身之外的最大的因数。下面将介绍解题思路以及算法实现。

解题思路

对于每个元素,我们需要找出除 1 和数字本身之外的最大的因数。因为一个数的因数都是成对出现的,所以我们只需要从 2 开始判断,判断到元素的平方根(因为一个数的因数最大不会超过它的平方根),如果找到一个因数,就记录下来,同时记录下当前除以该因数后得到的商,然后继续判断可能存在的更大的因数。

算法实现

下面给出使用 Python 实现的代码段:

def get_largest_divisor(arr):
    """
    获取数组中除 1 和数字本身之外的每个元素的最大除数
    :param arr: 数组
    :return: 每个元素的最大除数构成的数组
    """
    res = []
    for num in arr:
        max_divisor = 1
        quotient = num
        for i in range(2, int(num**0.5)+1):
            if num % i == 0:
                max_divisor = i
                quotient = num // i
                while quotient % i == 0:
                    quotient //= i
                    max_divisor *= i
        if quotient != 1 and num // quotient != max_divisor:
            max_divisor *= quotient
        res.append(max_divisor)
    return res

上面的代码中,我们先遍历每个元素,对于每个元素,我们再从 2 开始判断是否能整除,如果可以整除,就记录下当前因数,同时得到商,继续判断商是否能整除,如果能整除,就再次记录下因数,得到新的商,并重复上述操作。最后,如果商不为 1,并且商不等于当前得到的最大因数除以商,那么需要将商乘上当前得到的最大因数,得到完整的因数。

最后,我们得到的结果就是数组中除 1 和数字本身之外的每个元素的最大除数。