📅  最后修改于: 2023-12-03 15:40:03.158000             🧑  作者: Mango
这个题目要求我们对一个给定的数组中,对于每个元素,找出除 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 和数字本身之外的每个元素的最大除数。