📅  最后修改于: 2023-12-03 15:17:11.280000             🧑  作者: Mango
素因数是指质数因子,也就是一个数分解质因数后的质数因子。不同于最大质因数,最大不同素因数是指一个集合中不同数的最大素因数。
给定一个长度为 $N$ 的正整数数组 $arr$,以及一个正整数 $K$。对于每个长度为 $K$ 的子数组 $subarr$,找到 $subarr$ 中不同元素的最大素因数。如果 $subarr$ 中的所有元素都相同,则将该元素的最大素因数视为 $1$。将所有的最大素因数存储在一个新数组 $ans$ 中,并返回 $ans$。
输入:
arr = [10, 5, 7, 9, 2, 8, 4, 11]
K = 3
输出:
ans = [5, 7, 3, 1, 2, 2, 2]
解释:
subarr=[10,5,7]
的不同元素为 10, 5, 7
,它们的最大素因数分别为 5, 5, 7
,因此 max(5, 5, 7) = 7
,所以 ans[0] = 7
subarr=[5,7,9]
的不同元素为 5, 7, 9
,它们的最大素因数分别为 5, 7, 3
,因此 max(5, 7, 3) = 7
,所以 ans[1] = 7
...
我们可以依次遍历每个长度为 $K$ 的子数组,并求出它们的不同元素的最大素因数。具体实现可以使用 Python 的 set
数据结构,它可以快速地去除重复元素。对于一个子数组,我们可以使用一个 set
结构保存其中的不同元素,并使用一个循环计算这些元素的最大素因数。
下面是 Python 的实现。
def max_prime_factor(n):
"""
返回 n 的最大质因子
"""
i = 2
while i * i <= n:
while n % i == 0:
n = n // i
if n == 1:
return i
i += 1
if n > 1:
return n
return 1
def solve(arr, K):
ans = []
for i in range(len(arr) - K + 1):
subarr = arr[i:i+K]
primes = set()
for j in subarr:
primes.add(max_prime_factor(j))
ans.append(max(primes))
return ans