Dadas tres variables L, R y Q que denotan el rango [L, R] y el número total de consultas. Para cada consulta habrá una variable K . La tarea es encontrar el K- ésimo número primo más pequeño en el rango [L, R] . Si K es mayor que el conteo de números primos en el rango [L, R] , devuelve -1 .
Ejemplos:
Entrada: Q = 3, L = 5, R = 20
consultas: K = 4,
K = 3,
K = 9
Salida: 13 11 -1
Explicación: Los números primos en el rango dado son 5, 7, 11, 13, 17, 19 y
los números primos más pequeños cuarto y tercero son 13 y 11.Entrada: Q = 1, L = 15, R = 32
consultas: K = 3
Salida: 23
Enfoque: el problema dado se puede resolver con la ayuda del método de la criba de Eratóstenes :
cuando el algoritmo termina, todos los números de la lista que no están marcados son primos. Siga los pasos que se mencionan a continuación:
- Ejecute Sieve of Eratosthenes para el número en el rango [L, R]
- Para cada consulta, encuentre el K-ésimo primo más pequeño de los primos calculados.
- Si K excede el número de números primos en ese rango, devuelve -1.
Consulte la siguiente ilustración para comprender mejor el tamiz de Eratóstenes.
Ilustración: Tome rango [20, 40] .
Tamiz de Eratóstenes ayudará a encontrar los números primos en este rango.
Cree una lista de todos los números del 1 al 40. De acuerdo con el algoritmo, marque todos los números no primos en el rango dado.
Así que los números primos son los que no están marcados: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37. Los números primos en el rango [20, 40] son: 23, 29, 31
y 37
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; vector<int> primes; // Function to implement // Sieve Of Eratosthenes void sieveOfEratosthenes(int R) { primes.assign(R + 1, 0); primes[1] = 1; for (int i = 2; i * i <= R; i++) { if (primes[i] == 0) { for (int j = i + i; j <= R; j += i) primes[j] = 1; } } } // Function to return Kth smallest // prime number if it exists int kthSmallest(int L, int R, int K) { // To count the prime number int count = 0; // Loop to iterate the from L to R for (int i = L; i <= R; i++) { // Calculate the count Of // primes numbers if (primes[i] == 0) { count++; } // if count equals K, then // Kth smallest prime number is // found then return the number if (count == K) { return i; } } // Kth smallest prime number is not in // this range then return -1 return -1; } // Driver Code int main() { // No of Queries int Q = 3; int L, R, K; L = 5, R = 20; sieveOfEratosthenes(R); // First Query K = 4; cout << kthSmallest(L, R, K) << endl; // Second Query K = 3; cout << kthSmallest(L, R, K) << endl; // Third Query K = 5; cout << kthSmallest(L, R, K) << endl; return 0; }
Java
// Java code to implement the above approach import java.util.*; public class GFG { static int primes[] = new int[1000]; // Function to implement // Sieve Of Eratosthenes static void sieveOfEratosthenes(int R) { for(int i = 0; i < R + 1; i++) { primes[i] = 0; } primes[1] = 1; for (int i = 2; i * i <= R; i++) { if (primes[i] == 0) { for (int j = i + i; j <= R; j += i) primes[j] = 1; } } } // Function to return Kth smallest // prime number if it exists static int kthSmallest(int L, int R, int K) { // To count the prime number int count = 0; // Loop to iterate the from L to R for (int i = L; i <= R; i++) { // Calculate the count Of // primes numbers if (primes[i] == 0) { count++; } // if count equals K, then // Kth smallest prime number is // found then return the number if (count == K) { return i; } } // Kth smallest prime number is not in // this range then return -1 return -1; } // Driver code public static void main(String args[]) { // No of Queries int Q = 3; int L = 5, R = 20; sieveOfEratosthenes(R); // First Query int K = 4; System.out.println(kthSmallest(L, R, K)); // Second Query K = 3; System.out.println(kthSmallest(L, R, K)); // Third Query K = 5; System.out.println(kthSmallest(L, R, K)); } } // This code is contributed by Samim Hossain Mondal.
Python3
# Python code to implement the above approach primes = [0 for i in range(1000)]; # Function to implement # Sieve Of Eratosthenes def sieveOfEratosthenes(R): for i in range(0, R + 1): primes[i] = 0; primes[1] = 1; for i in range(2, pow(R, 2) + 1): if (primes[i] == 0): for j in range(i + i, R + 1, i): primes[j] = 1; # Function to return Kth smallest # prime number if it exists def kthSmallest(L, R, K): # To count the prime number count = 0; # Loop to iterate the from L to R for i in range(L,R+1): # Calculate the count Of # primes numbers if (primes[i] == 0): count += 1; # if count equals K, then # Kth smallest prime number is # found then return the number if (count == K): return i; # Kth smallest prime number is not in # this range then return -1 return -1; # Driver code if __name__ == '__main__': # No of Queries Q = 3; L = 5; R = 20; sieveOfEratosthenes(R); # First Query K = 4; print(kthSmallest(L, R, K)); # Second Query K = 3; print(kthSmallest(L, R, K)); # Third Query K = 5; print(kthSmallest(L, R, K)); # This code is contributed by shikhasingrajput
C#
// C# code to implement the above approach using System; class GFG { static int []primes = new int[1000]; // Function to implement // Sieve Of Eratosthenes static void sieveOfEratosthenes(int R) { for(int i = 0; i < R + 1; i++) { primes[i] = 0; } primes[1] = 1; for (int i = 2; i * i <= R; i++) { if (primes[i] == 0) { for (int j = i + i; j <= R; j += i) primes[j] = 1; } } } // Function to return Kth smallest // prime number if it exists static int kthSmallest(int L, int R, int K) { // To count the prime number int count = 0; // Loop to iterate the from L to R for (int i = L; i <= R; i++) { // Calculate the count Of // primes numbers if (primes[i] == 0) { count++; } // if count equals K, then // Kth smallest prime number is // found then return the number if (count == K) { return i; } } // Kth smallest prime number is not in // this range then return -1 return -1; } // Driver code public static void Main() { // No of Queries int Q = 3; int L = 5, R = 20; sieveOfEratosthenes(R); // First Query int K = 4; Console.WriteLine(kthSmallest(L, R, K)); // Second Query K = 3; Console.WriteLine(kthSmallest(L, R, K)); // Third Query K = 5; Console.WriteLine(kthSmallest(L, R, K)); } } // This code is contributed by Samim Hossain Mondal.
Javascript
<script> // JavaScript program for the above approach let primes; // Function to implement // Sieve Of Eratosthenes function sieveOfEratosthenes(R) { primes = new Array(R + 1).fill(0); primes[1] = 1; for(let i = 2; i * i <= R; i++) { if (primes[i] == 0) { for(let j = i + i; j <= R; j += i) primes[j] = 1; } } } // Function to return Kth smallest // prime number if it exists function kthSmallest(L, R, K) { // To count the prime number let count = 0; // Loop to iterate the from L to R for(let i = L; i <= R; i++) { // Calculate the count Of // primes numbers if (primes[i] == 0) { count++; } // If count equals K, then // Kth smallest prime number is // found then return the number if (count == K) { return i; } } // Kth smallest prime number is not in // this range then return -1 return -1; } // Driver Code // No of Queries let Q = 3; let L, R, K; L = 5, R = 20; sieveOfEratosthenes(R); // First Query K = 4; document.write(kthSmallest(L, R, K) + '<br>'); // Second Query K = 3; document.write(kthSmallest(L, R, K) + '<br>'); // Third Query K = 5; document.write(kthSmallest(L, R, K) + '<br>'); // This code is contributed by Potta Lokesh </script>
13 11 17
Complejidad de tiempo: O(N * log(log N)))
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por athakur42u y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA