📌  相关文章
📜  数组中最长质数子序列的长度(1)

📅  最后修改于: 2023-12-03 15:10:21.816000             🧑  作者: Mango

数组中最长质数子序列的长度

在给定的整数数组中,找到最长的质数子序列,并返回该子序列的长度。

思路

我们可以使用动态规划来解决这个问题。

  • 定义一个 dp[i] 数组,表示以第 i 个元素结尾的最长质数子序列的长度。
  • 初始化 dp 数组的值为 1,因为每个元素本身都可以作为一个长度为 1 的子序列。
  • 对于每个 i(从 1 开始),我们从 0i-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]