Length of Longest Prime Subsequence in an Array
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: 3
Longest Prime Subsequence is {3, 2, 11} and hence the answer is 3.Input: arr[] = { 6, 4, 10, 13, 9, 25 }
Output: 1
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 <bits/stdc++.h> using namespace std; #define N 100005 // Function to create Sieve // to check primes 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 numbers int 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 code int 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 Array import java.util.*; class GFG { static final int N = 100005 ; // Function to create Sieve // to check primes static 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 numbers static 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 code public 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 Array N = 100005 # Function to create Sieve # to check primes def 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 numbers def 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 code if __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 Array using System; class GFG { static readonly int N = 100005; // Function to create Sieve // to check primes static 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 numbers static 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 code public 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 |
Output:
3
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.