# Length of Longest Prime Subsequence in an Array

• Last Updated : 10 Nov, 2021

Given an array arr containing non-negative integers, the task is to print the length of the longest subsequence of prime numbers in the array.
Examples:

Input: arr[] = { 3, 4, 11, 2, 9, 21 }
Output:
Longest Prime Subsequence is {3, 2, 11} and hence the answer is 3.
Input: arr[] = { 6, 4, 10, 13, 9, 25 }
Output:

Approach:

• Traverse the given array.
• For each element in the array, check if it prime or not.
• If the element is prime, it will be in Longest Prime Subsequence. Hence, increment the required length of Longest Prime Subsequence by 1

Below is the implementation of the above approach:

## C++

 // C++ program to find the length of// Longest Prime Subsequence in an Array #include using namespace std;#define N 100005 // Function to create Sieve// to check primesvoid SieveOfEratosthenes(    bool prime[], int p_size){     // False here indicates    // that it is not prime    prime[0] = false;    prime[1] = false;     for (int p = 2; p * p <= p_size; p++) {         // If prime[p] is not changed,        // then it is a prime        if (prime[p]) {             // Update all multiples of p,            // set them to non-prime            for (int i = p * 2;                 i <= p_size;                 i += p)                prime[i] = false;        }    }} // Function to find the longest subsequence// which contain all prime numbersint longestPrimeSubsequence(int arr[], int n){    bool prime[N + 1];    memset(prime, true, sizeof(prime));     // Precompute N primes    SieveOfEratosthenes(prime, N);     int answer = 0;     // Find the length of    // longest prime subsequence    for (int i = 0; i < n; i++) {        if (prime[arr[i]]) {            answer++;        }    }     return answer;} // Driver codeint main(){    int arr[] = { 3, 4, 11, 2, 9, 21 };    int n = sizeof(arr) / sizeof(arr[0]);     // Function call    cout << longestPrimeSubsequence(arr, n)         << endl;     return 0;}

## Java

 // Java program to find the length of// Longest Prime Subsequence in an Arrayimport java.util.*; class GFG{static final int N = 100005;  // Function to create Sieve// to check primesstatic void SieveOfEratosthenes(    boolean prime[], int p_size){      // False here indicates    // that it is not prime    prime[0] = false;    prime[1] = false;      for (int p = 2; p * p <= p_size; p++) {          // If prime[p] is not changed,        // then it is a prime        if (prime[p]) {              // Update all multiples of p,            // set them to non-prime            for (int i = p * 2;                 i <= p_size;                 i += p)                prime[i] = false;        }    }}  // Function to find the longest subsequence// which contain all prime numbersstatic int longestPrimeSubsequence(int arr[], int n){    boolean []prime = new boolean[N + 1];    Arrays.fill(prime, true);      // Precompute N primes    SieveOfEratosthenes(prime, N);      int answer = 0;      // Find the length of    // longest prime subsequence    for (int i = 0; i < n; i++) {        if (prime[arr[i]]) {            answer++;        }    }      return answer;}  // Driver codepublic static void main(String[] args){    int arr[] = { 3, 4, 11, 2, 9, 21 };    int n = arr.length;      // Function call    System.out.print(longestPrimeSubsequence(arr, n)         +"\n");}} // This code is contributed by 29AjayKumar

## Python3

 # Python 3 program to find the length of# Longest Prime Subsequence in an ArrayN = 100005  # Function to create Sieve# to check primesdef SieveOfEratosthenes(prime,  p_size):      # False here indicates    # that it is not prime    prime[0] = False    prime[1] = False      p = 2    while  p * p <= p_size:          # If prime[p] is not changed,        # then it is a prime        if (prime[p]):              # Update all multiples of p,            # set them to non-prime            for i in range( p * 2, p_size + 1, p):                prime[i] = False         p += 1       # Function to find the longest subsequence# which contain all prime numbersdef longestPrimeSubsequence( arr, n):    prime = [True]*(N + 1)      # Precompute N primes    SieveOfEratosthenes(prime, N)      answer = 0      # Find the length of    # longest prime subsequence    for i in range (n):        if (prime[arr[i]]):            answer += 1      return answer  # Driver codeif __name__ == "__main__":    arr = [ 3, 4, 11, 2, 9, 21 ]    n = len(arr)      # Function call    print (longestPrimeSubsequence(arr, n)) # This code is contributed by chitranayal

## C#

 // C# program to find the length of// longest Prime Subsequence in an Arrayusing System; class GFG{static readonly int N = 100005;   // Function to create Sieve// to check primesstatic void SieveOfEratosthenes(    bool []prime, int p_size){       // False here indicates    // that it is not prime    prime[0] = false;    prime[1] = false;       for (int p = 2; p * p <= p_size; p++) {           // If prime[p] is not changed,        // then it is a prime        if (prime[p]) {               // Update all multiples of p,            // set them to non-prime            for (int i = p * 2;                 i <= p_size;                 i += p)                prime[i] = false;        }    }}   // Function to find the longest subsequence// which contain all prime numbersstatic int longestPrimeSubsequence(int []arr, int n){    bool []prime = new bool[N + 1];    for (int i = 0; i < N+1; i++)        prime[i] = true;       // Precompute N primes    SieveOfEratosthenes(prime, N);       int answer = 0;       // Find the length of    // longest prime subsequence    for (int i = 0; i < n; i++) {        if (prime[arr[i]]) {            answer++;        }    }       return answer;}   // Driver codepublic static void Main(String[] args){    int []arr = { 3, 4, 11, 2, 9, 21 };    int n = arr.Length;       // Function call    Console.Write(longestPrimeSubsequence(arr, n)         +"\n");}}  // This code is contributed by 29AjayKumar

## Javascript



Output

3

Time Complexity: O(N log (log N))

Auxiliary Space: O(N)

My Personal Notes arrow_drop_up