Dada una array arr que contiene enteros no negativos, la tarea es imprimir la longitud de la subsecuencia más larga de números primos en la array.
Ejemplos:
Entrada: arr[] = { 3, 4, 11, 2, 9, 21 }
Salida: 3
La subsecuencia principal más larga es {3, 2, 11} y, por lo tanto, la respuesta es 3.
Entrada: arr[] = { 6, 4 , 10, 13, 9, 25 }
Salida: 1
Acercarse:
- Recorre la array dada.
- Para cada elemento de la array, compruebe si es primo o no .
- Si el elemento es primo, estará en la subsecuencia principal más larga. Por lo tanto, incremente la longitud requerida de la subsecuencia principal más larga en 1
A continuación se muestra la implementación del enfoque anterior:
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
Javascript
<script> // JavaScript program to find the length of // Longest Prime Subsequence in an Array let N = 100005 // Function to create Sieve // to check primes function SieveOfEratosthenes(prime, p_size) { // False here indicates // that it is not prime prime[0] = false; prime[1] = false; for (let 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 (let i = p * 2; i <= p_size; i += p) prime[i] = false; } } } // Function to find the longest subsequence // which contain all prime numbers function longestPrimeSubsequence(arr, n) { let prime = new Array(N + 1); prime.fill(true) // Precompute N primes SieveOfEratosthenes(prime, N); let answer = 0; // Find the length of // longest prime subsequence for (let i = 0; i < n; i++) { if (prime[arr[i]]) { answer++; } } return answer; } // Driver code let arr = [ 3, 4, 11, 2, 9, 21 ]; let n = arr.length // Function call document.write(longestPrimeSubsequence(arr, n) + "<br>"); // This code is contributed by gfgking </script>
Producción
3
Complejidad de tiempo: O(N log (log N))
Espacio Auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por muskan_garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA