📜  第K个素数大于N

📅  最后修改于: 2021-06-25 20:16:19             🧑  作者: Mango

给定数字N,任务是打印大于N的第K个质数。
注意:给定N和K使得答案总是小于10 ^ 6。
例子:

Input: N = 5, K = 5
Output: 19

Input: N = 10, K = 3
Output: 17

解决此问题的简单方法是从n + 1迭代到10 ^ 6,对于每个数字,检查它是否为质数并打印第K个质数。如果只有一个查询,则此解决方案看起来不错。但是如果有多个查询,效率就不高。
解决此问题的有效方法是使用Eratosthenes筛子生成小于10 ^ 6的所有素数,并从n + 1迭代到10 ^ 6,然后打印第K个素数。

C++
// CPP program to print the Kth prime greater than N
#include 
using namespace std;
 
// set the MAX_SIZE of the array to 10^6
const int MAX_SIZE = 1e6;
 
// initialize the prime array
bool prime[MAX_SIZE + 1];
 
void sieve()
{
 
    // set all numbers as prime for time being
    memset(prime, true, sizeof(prime));
 
    for (int p = 2; p * p <= MAX_SIZE; p++) {
 
        // if prime[p] is not changed, then it is a prime
        if (prime[p] == true) {
 
            // update all multiples of p
            for (int i = p * p; i <= MAX_SIZE; i += p)
                prime[i] = false;
        }
    }
}
// Function to find the kth prime greater than n
int kthPrimeGreaterThanN(int n, int k)
{
 
    int res = -1;
    // looping through the numbers greater than n
    for (int i = n + 1; i < MAX_SIZE; i++) {
 
        // decrement k if i is prime
        if (prime[i] == true)
            k--;
 
        // store the kth prime greater than n
        if (k == 0) {
            res = i;
            break;
        }
    }
 
    return res;
}
 
// Driver code
int main()
{
 
    sieve();
    int n = 2, k = 15;
 
    // Print the kth prime number greater than n
    cout << kthPrimeGreaterThanN(n, k);
    return 0;
}


Java
// Java program to print the
// Kth prime greater than N
import java.util.*;
 
class GFG
{
 
// set the MAX_SIZE of the array to 10^6
static int MAX_SIZE = (int) 1e6;
 
// initialize the prime array
static boolean []prime = new boolean[MAX_SIZE + 1];
 
static void sieve()
{
 
    // set all numbers as prime for time being
    Arrays.fill(prime, true);
 
    for (int p = 2; p * p <= MAX_SIZE; p++)
    {
 
        // if prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true)
        {
 
            // update all multiples of p
            for (int i = p * p;
                     i <= MAX_SIZE; i += p)
                prime[i] = false;
        }
    }
}
 
// Function to find the kth prime greater than n
static int kthPrimeGreaterThanN(int n, int k)
{
 
    int res = -1;
     
    // looping through the numbers greater than n
    for (int i = n + 1; i < MAX_SIZE; i++)
    {
 
        // decrement k if i is prime
        if (prime[i] == true)
            k--;
 
        // store the kth prime greater than n
        if (k == 0)
        {
            res = i;
            break;
        }
    }
    return res;
}
 
// Driver code
public static void main(String[] args)
{
    sieve();
    int n = 2, k = 15;
 
    // Print the kth prime number greater than n
    System.out.println(kthPrimeGreaterThanN(n, k));
}
}
 
// This code is contributed by 29AjayKumar


Python 3
# Python 3 program to print the Kth
# prime greater than N
 
# set the MAX_SIZE of the array to 10^6
MAX_SIZE = int(1e6)
 
# initialize the prime array
prime = [True] * (MAX_SIZE + 1)
 
# Code for Sieve of Eratosthenes
def seive():
    p = 2
     
    while (p * p <= MAX_SIZE):
         
        # 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, MAX_SIZE, p):
                prime[i] = False
        p += 1
 
# Function to find the kth prime
# greater than n
def kthPrimeGreaterThanN(n, k):
    res = -1
     
    # looping through the numbers
    # greater than n
    for i in range(n + 1, MAX_SIZE):
         
        # decrement k if i is prime
        if (prime[i] == True):
            k -= 1
         
        # store the kth prime greater than n
        if (k == 0):
            res = i
            break
     
    return res
 
# Driver Code
if __name__=='__main__':
    n = 2
    k = 15
    seive()
     
    # Print the kth prime number
    # greater than n
    print(kthPrimeGreaterThanN(n, k))
     
# This code is contributed by Rupesh Rao


C#
// C# program to print the
// Kth prime greater than N
using System;
using System.Collections.Generic;
     
class GFG
{
 
// set the MAX_SIZE of the array to 10^6
static int MAX_SIZE = (int) 1e6;
 
// initialize the prime array
static Boolean []prime = new Boolean[MAX_SIZE + 1];
 
static void sieve()
{
 
    // set all numbers as prime for time being
    for (int i = 0; i < MAX_SIZE + 1; i++)
        prime[i] = true;
 
    for (int p = 2; p * p <= MAX_SIZE; p++)
    {
 
        // if prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true)
        {
 
            // update all multiples of p
            for (int i = p * p;
                     i <= MAX_SIZE; i += p)
                prime[i] = false;
        }
    }
}
 
// Function to find the kth prime greater than n
static int kthPrimeGreaterThanN(int n, int k)
{
 
    int res = -1;
     
    // looping through the numbers greater than n
    for (int i = n + 1; i < MAX_SIZE; i++)
    {
 
        // decrement k if i is prime
        if (prime[i] == true)
            k--;
 
        // store the kth prime greater than n
        if (k == 0)
        {
            res = i;
            break;
        }
    }
    return res;
}
 
// Driver code
public static void Main(String[] args)
{
    sieve();
    int n = 2, k = 15;
 
    // Print the kth prime number greater than n
    Console.WriteLine(kthPrimeGreaterThanN(n, k));
}
}
 
// This code is contributed by Rajput-Ji


Javascript


输出:
53

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。