📅  最后修改于: 2023-12-03 14:49:53.095000             🧑  作者: Mango
当需要查找一个数组中最长的质数子数组时,可以使用分段筛法来解决。这种算法的时间复杂度为O(n * sqrt(max(a))),其中n是数组长度,max(a)是数组中最大的数。
def longest_prime_subarray(arr):
max_num = max(arr)
# 初始化布尔型数组
is_prime = [True] * (max_num + 1)
is_prime[0] = is_prime[1] = False
i = 2
# 分段筛法
while i * i <= max_num:
if is_prime[i]:
j = i * i
while j <= max_num:
is_prime[j] = False
j += i
i += 1
# 统计最长连续质数子数组
longest_len = 0
curr_len = 0
for num in arr:
if is_prime[num]:
curr_len += 1
else:
longest_len = max(longest_len, curr_len)
curr_len = 0
longest_len = max(longest_len, curr_len)
return longest_len
使用分段筛法的最长质数子数组算法可以在O(n * sqrt(max(a)))的时间复杂度内完成数组的遍历与统计。同时这种算法还提供了is_prime数组,可以用于后续的质数判断。