给定数字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现场课程美国》。