📅  最后修改于: 2023-12-03 15:10:21.816000             🧑  作者: Mango
在给定的整数数组中,找到最长的质数子序列,并返回该子序列的长度。
我们可以使用动态规划来解决这个问题。
dp[i]
数组,表示以第 i
个元素结尾的最长质数子序列的长度。dp
数组的值为 1
,因为每个元素本身都可以作为一个长度为 1
的子序列。i
(从 1
开始),我们从 0
到 i-1
遍历每个位置 j
,并进行如下操作:j
个元素是质数,并且它在 i
之前,那么我们可以把 dp[i]
更新为 dp[j] + 1
。dp
数组,找到其中的最大值,即为最长质数子序列的长度。def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def longest_prime_subseq(arr):
n = len(arr)
dp = [1] * n
for i in range(1, n):
for j in range(i):
if is_prime(arr[j]) and arr[j] < arr[i]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
arr = [2, 3, 7, 4, 10, 5, 8]
print(longest_prime_subseq(arr)) # 输出 3,因为最长的质数子序列是 [2, 3, 5]