Programa para hallar el N-ésimo Número Primo

Dado un número entero N . La tarea es encontrar el N- ésimo número primo.

Ejemplos:  

Entrada :
Salida : 11

Entrada : 16 
Salida : 53

Entrada: 1049 
Salida: 8377 

Acercarse:  

  • Encuentra los números primos hasta MAX_SIZE usando Sieve of Eratosthenes .
  • Almacene todos los números primos en un vector.
  • Para un número N dado, devuelve el elemento en el índice (N-1) en un vector.

A continuación se muestra la implementación del enfoque anterior: 

C++

// C++ program to the nth prime number
 
#include <bits/stdc++.h>
using namespace std;
 
// initializing the max value
#define MAX_SIZE 1000005
 
// Function to generate N prime numbers using
// Sieve of Eratosthenes
void SieveOfEratosthenes(vector<int>& primes)
{
    // Create a boolean array "IsPrime[0..MAX_SIZE]" and
    // initialize all entries it as true. A value in
    // IsPrime[i] will finally be false if i is
    // Not a IsPrime, else true.
    bool IsPrime[MAX_SIZE];
    memset(IsPrime, true, sizeof(IsPrime));
 
    for (int p = 2; p * p < MAX_SIZE; p++) {
        // If IsPrime[p] is not changed, then it is a prime
        if (IsPrime[p] == true) {
            // Update all multiples of p greater than or
            // equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (int i = p * p; i < MAX_SIZE; i += p)
                IsPrime[i] = false;
        }
    }
 
    // Store all prime numbers
    for (int p = 2; p < MAX_SIZE; p++)
        if (IsPrime[p])
            primes.push_back(p);
}
 
// Driver Code
int main()
{
    // To store all prime numbers
    vector<int> primes;
 
    // Function call
    SieveOfEratosthenes(primes);
 
    cout << "5th prime number is " << primes[4] << endl;
    cout << "16th prime number is " << primes[15] << endl;
    cout << "1049th prime number is " << primes[1048];
 
    return 0;
}

Java

// Java program to the nth prime number 
import java.util.ArrayList;
class GFG
{
     
    // initializing the max value
    static int MAX_SIZE = 1000005;
     
    // To store all prime numbers
    static ArrayList<Integer> primes =
       new ArrayList<Integer>();
     
    // Function to generate N prime numbers
    // using Sieve of Eratosthenes
    static void SieveOfEratosthenes()
    {
        // Create a boolean array "IsPrime[0..MAX_SIZE]"
        // and initialize all entries it as true.
        // A value in IsPrime[i] will finally be false
        // if i is Not a IsPrime, else true.
        boolean [] IsPrime = new boolean[MAX_SIZE];
         
        for(int i = 0; i < MAX_SIZE; i++)
            IsPrime[i] = true;
         
        for (int p = 2; p * p < MAX_SIZE; p++)
        {
            // If IsPrime[p] is not changed,
            // then it is a prime
            if (IsPrime[p] == true)
            {
                // Update all multiples of p greater than or
                // equal to the square of it
                // numbers which are multiple of p and are
                // less than p^2 are already been marked.
                for (int i = p * p; i < MAX_SIZE; i += p)
                    IsPrime[i] = false;
            }
        }
     
        // Store all prime numbers
        for (int p = 2; p < MAX_SIZE; p++)
        if (IsPrime[p] == true)
                primes.add(p);
    }
     
    // Driver Code
    public static void main (String[] args)
    {
         
        // Function call
        SieveOfEratosthenes();
     
        System.out.println("5th prime number is " +
                                    primes.get(4));
        System.out.println("16th prime number is " +
                                    primes.get(15));
        System.out.println("1049th prime number is " +
                                    primes.get(1048));
    }
}
 
// This code is contributed by ihritik

Python3

# Python3 program to the nth prime number 
primes = []
 
# Function to generate N prime numbers using 
# Sieve of Eratosthenes
def SieveOfEratosthenes():
     
    n = 1000005
     
    # Create a boolean array "prime[0..n]" and
    # initialize all entries it as true. A value
    # in prime[i] will finally be false if i is
    # Not a prime, else true.
    prime = [True for i in range(n + 1)]
     
    p = 2
    while (p * p <= n):
           
        # If prime[p] is not changed,
        # then it is a prime
        if (prime[p] == True):
               
            # Update all multiples of p
            for i in range(p * p, n + 1, p):
                prime[i] = False
                 
        p += 1
       
    # Print all prime numbers
    for p in range(2, n + 1):
        if prime[p]:
            primes.append(p)
   
# Driver code
if __name__=='__main__':
     
    # Function call
    SieveOfEratosthenes()
     
    print("5th prime number is", primes[4]);
    print("16th prime number is", primes[15]);
    print("1049th prime number is", primes[1048]);
     
# This code is contributed by grand_master

C#

// C# program to the nth prime number
using System;
using System.Collections;
 
class GFG
{
     
// initializing the max value
static int MAX_SIZE = 1000005;
 
// To store all prime numbers
static ArrayList primes = new ArrayList();
 
// Function to generate N prime numbers using
// Sieve of Eratosthenes
static void SieveOfEratosthenes()
{
    // Create a boolean array "IsPrime[0..MAX_SIZE]"
    // and initialize all entries it as true.
    // A value in IsPrime[i] will finally be false
    // if i is Not a IsPrime, else true.
    bool [] IsPrime = new bool[MAX_SIZE];
     
    for(int i = 0; i < MAX_SIZE; i++)
        IsPrime[i] = true;
     
    for (int p = 2; p * p < MAX_SIZE; p++)
    {
        // If IsPrime[p] is not changed,
        // then it is a prime
        if (IsPrime[p] == true)
        {
            // Update all multiples of p greater than or
            // equal to the square of it
            // numbers which are multiple of p and are
            // less than p^2 are already been marked.
            for (int i = p * p; i < MAX_SIZE; i += p)
                IsPrime[i] = false;
        }
    }
 
    // Store all prime numbers
    for (int p = 2; p < MAX_SIZE; p++)
    if (IsPrime[p] == true)
            primes.Add(p);
}
 
// Driver Code
public static void Main ()
{
     
    // Function call
    SieveOfEratosthenes();
 
    Console.WriteLine("5th prime number is " +
                                   primes[4]);
    Console.WriteLine("16th prime number is " +
                                   primes[15]);
    Console.WriteLine("1049th prime number is " +
                                   primes[1048]);
}
}
 
// This code is contributed by ihritik

Javascript

<script>
 
// Javascript program to the nth prime number
 
// initializing the max value
var MAX_SIZE = 1000005;
 
// Function to generate N prime numbers using
// Sieve of Eratosthenes
function SieveOfEratosthenes(primes)
{
    // Create a boolean array
    // "IsPrime[0..MAX_SIZE]" and
    // initialize all entries it as true.
    // A value in
    // IsPrime[i] will finally be false if i is
    // Not a IsPrime, else true.
    var IsPrime = Array(MAX_SIZE).fill(true);
     
    var p,i;
    for (p = 2; p * p < MAX_SIZE;p++)
    {
        // If IsPrime[p] is not changed,
        // then it is a prime
        if (IsPrime[p] == true)
        {
            // Update all multiples of p
            // greater than or
            // equal to the square of it
            // numbers which are multiple
            // of p and are
            // less than p^2 are already
            // been marked.
            for(i = p * p; i < MAX_SIZE; i += p)
                IsPrime[i] = false;
        }
    }
 
    // Store all prime numbers
    for (p = 2; p < MAX_SIZE; p++)
        if (IsPrime[p])
            primes.push(p);
}
 
// Driver Code
    // To store all prime numbers
    var primes = [];
 
    // Function call
    SieveOfEratosthenes(primes);
 
    document.write(
    "5th prime number is "+primes[4]+"<br>"
    );
    document.write(
    "16th prime number is "+primes[15]+"<br>"
    );
    document.write(
    "1049th prime number is "+primes[1048]+"<br>"
    );
 
</script>
Producción

5th prime number is 11
16th prime number is 53
1049th prime number is 8377

Otro enfoque : 

  • para encontrar un número primo en una posición dada, escriba una función isPrime para verificar que el número sea primo o no
  • escribir una función para obtener un número primo en la posición dada 
     

A continuación se muestra la implementación del enfoque anterior: 

C++

// c++ program to find the n-th prime number
 
#include <bits/stdc++.h>
using namespace std;
 
 
// function to check given number is prime or not
// basic idea is numbers not divided by any primes are primes
int isPrime(int k)
{
    // Corner cases
    if (k <= 1)
        return 0;
    if (k==2 || k==3)
        return 1;
  
    // below 5 there is only two prime numbers 2 and 3
    if (k % 2 == 0 || k % 3 == 0)
        return 0;
  
  // Using concept of prime number can be represented in form of (6*k + 1) or(6*k - 1)
    for (int i = 5; i * i <= k; i = i + 6)
        if (k % i == 0 || k % (i + 2) == 0)
            return 0;
  
    return 1;
}
 
 
// function which gives prime at position n
int nThPrime(int n)
{
    int i=2;
     
    while(n>0)
    {
        // each time if a prime number found decrease n
        if(isPrime(i))
          n--;
        
        i++;  //increase the integer to go ahead
    }
    i-=1; // since decrement of k is being done before
          //Increment of i , so i should be decreased by 1
    return i;
}
 
int main()
{
    cout<<"5th prime number is : "<<nThPrime(5)<<"\n";
    cout<<"7th prime number is : "<<nThPrime(7)<<"\n";
    cout<<"10th prime number is : "<<nThPrime(10)<<"\n";
    return 0;
}
// This code is contributed by Ujjwal Kumar Bhardwaj
Producción

5th prime number is : 11
7th prime number is : 17
10th prime number is : 29

Publicación traducida automáticamente

Artículo escrito por balindam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *