📅  最后修改于: 2023-12-03 15:41:17.025000             🧑  作者: Mango
素数是指只能被1和自身整除的正整数,如2、3、5、7、11等。给定一个数组,寻找其中最长的素数子序列,并返回其长度。
定义一个函数 is_prime(num)
,用来判断一个数是否为素数。
遍历数组,对于每一个元素,以它为开头,向后检查是否有连续的素数,并计算素数序列的长度,取最大值。
def is_prime(num):
"""
判断一个数是否为素数
"""
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
def longest_prime_subsequence_length(arr):
"""
给定数组中最长的素数子序列的长度
"""
max_len = 0 # 最长素数序列的长度
i = 0
while i < len(arr):
if not is_prime(arr[i]):
i += 1
continue
j = i
while j < len(arr) and is_prime(arr[j]):
j += 1
max_len = max(max_len, j - i)
i = j
return max_len
assert longest_prime_subsequence_length([1, 2, 3, 4, 5, 7, 8, 11]) == 4
assert longest_prime_subsequence_length([2, 3, 5, 7, 11]) == 5
assert longest_prime_subsequence_length([4, 6, 8, 9]) == 0
时间复杂度为 $O(n \sqrt{n})$,其中 n 是数组的长度。因为在判断一个数是否为素数时,需要遍历它的所有因数,因此时间复杂度为 $\sqrt{n}$。因为要遍历数组中所有的元素,因此总时间复杂度为 $O(n \sqrt{n})$。