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: 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++
#include <bits/stdc++.h>
using namespace std;
#define N 100005
void SieveOfEratosthenes(
bool prime[], int p_size)
{
prime[0] = false ;
prime[1] = false ;
for ( int p = 2; p * p <= p_size; p++) {
if (prime[p]) {
for ( int i = p * 2;
i <= p_size;
i += p)
prime[i] = false ;
}
}
}
int longestPrimeSubsequence( int arr[], int n)
{
bool prime[N + 1];
memset (prime, true , sizeof (prime));
SieveOfEratosthenes(prime, N);
int answer = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
answer++;
}
}
return answer;
}
int main()
{
int arr[] = { 3, 4, 11, 2, 9, 21 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << longestPrimeSubsequence(arr, n)
<< endl;
return 0;
}
|
Java
import java.util.*;
class GFG
{
static final int N = 100005 ;
static void SieveOfEratosthenes(
boolean prime[], int p_size)
{
prime[ 0 ] = false ;
prime[ 1 ] = false ;
for ( int p = 2 ; p * p <= p_size; p++) {
if (prime[p]) {
for ( int i = p * 2 ;
i <= p_size;
i += p)
prime[i] = false ;
}
}
}
static int longestPrimeSubsequence( int arr[], int n)
{
boolean []prime = new boolean [N + 1 ];
Arrays.fill(prime, true );
SieveOfEratosthenes(prime, N);
int answer = 0 ;
for ( int i = 0 ; i < n; i++) {
if (prime[arr[i]]) {
answer++;
}
}
return answer;
}
public static void main(String[] args)
{
int arr[] = { 3 , 4 , 11 , 2 , 9 , 21 };
int n = arr.length;
System.out.print(longestPrimeSubsequence(arr, n)
+ "\n" );
}
}
|
Python3
N = 100005
def SieveOfEratosthenes(prime, p_size):
prime[ 0 ] = False
prime[ 1 ] = False
p = 2
while p * p < = p_size:
if (prime[p]):
for i in range ( p * 2 , p_size + 1 , p):
prime[i] = False
p + = 1
def longestPrimeSubsequence( arr, n):
prime = [ True ] * (N + 1 )
SieveOfEratosthenes(prime, N)
answer = 0
for i in range (n):
if (prime[arr[i]]):
answer + = 1
return answer
if __name__ = = "__main__" :
arr = [ 3 , 4 , 11 , 2 , 9 , 21 ]
n = len (arr)
print (longestPrimeSubsequence(arr, n))
|
C#
using System;
class GFG
{
static readonly int N = 100005;
static void SieveOfEratosthenes(
bool []prime, int p_size)
{
prime[0] = false ;
prime[1] = false ;
for ( int p = 2; p * p <= p_size; p++) {
if (prime[p]) {
for ( int i = p * 2;
i <= p_size;
i += p)
prime[i] = false ;
}
}
}
static int longestPrimeSubsequence( int []arr, int n)
{
bool []prime = new bool [N + 1];
for ( int i = 0; i < N+1; i++)
prime[i] = true ;
SieveOfEratosthenes(prime, N);
int answer = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
answer++;
}
}
return answer;
}
public static void Main(String[] args)
{
int []arr = { 3, 4, 11, 2, 9, 21 };
int n = arr.Length;
Console.Write(longestPrimeSubsequence(arr, n)
+ "\n" );
}
}
|
Javascript
<script>
let N = 100005
function SieveOfEratosthenes(prime, p_size)
{
prime[0] = false ;
prime[1] = false ;
for (let p = 2; p * p <= p_size; p++) {
if (prime[p]) {
for (let i = p * 2;
i <= p_size;
i += p)
prime[i] = false ;
}
}
}
function longestPrimeSubsequence(arr, n)
{
let prime = new Array(N + 1);
prime.fill( true )
SieveOfEratosthenes(prime, N);
let answer = 0;
for (let i = 0; i < n; i++) {
if (prime[arr[i]]) {
answer++;
}
}
return answer;
}
let arr = [ 3, 4, 11, 2, 9, 21 ];
let n = arr.length
document.write(longestPrimeSubsequence(arr, n) + "<br>" );
</script>
|
Time Complexity: O(N log (log N))
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...