Kth prime number greater than N
Given a number N, the task is to print the Kth prime number greater than N.
Note: N and K are so given that answers are always less than 10^6.
Examples:
Input: N = 5, K = 5
Output: 19
Input: N = 10, K = 3
Output: 17
A simple solution for this problem is to iterate from n+1 to 10^6 and for every number, check if it is prime and print the Kth prime number. This solution looks fine if there is only one query. But not efficient if there are multiple queries.
An efficient solution for this problem is to generate all primes less than 10^6 using Sieve of Eratosthenes and iterate from n+1 to 10^6 and then print the Kth prime number.
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 1e6;
bool prime[MAX_SIZE + 1];
void sieve()
{
memset (prime, true , sizeof (prime));
for ( int p = 2; p * p <= MAX_SIZE; p++) {
if (prime[p] == true ) {
for ( int i = p * p; i <= MAX_SIZE; i += p)
prime[i] = false ;
}
}
}
int kthPrimeGreaterThanN( int n, int k)
{
int res = -1;
for ( int i = n + 1; i < MAX_SIZE; i++) {
if (prime[i] == true )
k--;
if (k == 0) {
res = i;
break ;
}
}
return res;
}
int main()
{
sieve();
int n = 2, k = 15;
cout << kthPrimeGreaterThanN(n, k);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int MAX_SIZE = ( int ) 1e6;
static boolean []prime = new boolean [MAX_SIZE + 1 ];
static void sieve()
{
Arrays.fill(prime, true );
for ( int p = 2 ; p * p <= MAX_SIZE; p++)
{
if (prime[p] == true )
{
for ( int i = p * p;
i <= MAX_SIZE; i += p)
prime[i] = false ;
}
}
}
static int kthPrimeGreaterThanN( int n, int k)
{
int res = - 1 ;
for ( int i = n + 1 ; i < MAX_SIZE; i++)
{
if (prime[i] == true )
k--;
if (k == 0 )
{
res = i;
break ;
}
}
return res;
}
public static void main(String[] args)
{
sieve();
int n = 2 , k = 15 ;
System.out.println(kthPrimeGreaterThanN(n, k));
}
}
|
Python 3
MAX_SIZE = int ( 1e6 )
prime = [ True ] * (MAX_SIZE + 1 )
def sieve():
p = 2
while (p * p < = MAX_SIZE):
if (prime[p] = = True ):
for i in range (p * p, MAX_SIZE, p):
prime[i] = False
p + = 1
def kthPrimeGreaterThanN(n, k):
res = - 1
for i in range (n + 1 , MAX_SIZE):
if (prime[i] = = True ):
k - = 1
if (k = = 0 ):
res = i
break
return res
if __name__ = = '__main__' :
n = 2
k = 15
sieve()
print (kthPrimeGreaterThanN(n, k))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static int MAX_SIZE = ( int ) 1e6;
static Boolean []prime = new Boolean[MAX_SIZE + 1];
static void sieve()
{
for ( int i = 0; i < MAX_SIZE + 1; i++)
prime[i] = true ;
for ( int p = 2; p * p <= MAX_SIZE; p++)
{
if (prime[p] == true )
{
for ( int i = p * p;
i <= MAX_SIZE; i += p)
prime[i] = false ;
}
}
}
static int kthPrimeGreaterThanN( int n, int k)
{
int res = -1;
for ( int i = n + 1; i < MAX_SIZE; i++)
{
if (prime[i] == true )
k--;
if (k == 0)
{
res = i;
break ;
}
}
return res;
}
public static void Main(String[] args)
{
sieve();
int n = 2, k = 15;
Console.WriteLine(kthPrimeGreaterThanN(n, k));
}
}
|
Javascript
<script>
var MAX_SIZE = 1000006;
var prime = Array(MAX_SIZE + 1).fill( true );
function sieve()
{
for ( var p = 2; p * p <= MAX_SIZE; p++)
{
then it is a prime
if (prime[p] == true ) {
for ( var i = p * p; i <= MAX_SIZE; i += p)
prime[i] = false ;
}
}
}
function kthPrimeGreaterThanN(n, k)
{
var res = -1;
for ( var i = n + 1; i < MAX_SIZE; i++)
{
if (prime[i] == true )
k--;
if (k == 0) {
res = i;
break ;
}
}
return res;
}
sieve();
var n = 2, k = 15;
document.write( kthPrimeGreaterThanN(n, k));
</script>
|
Naive Approach:
Approach:
In this approach, we will check each number greater than N whether it is a prime number or not. We will keep a counter variable to count the number of prime numbers found. Once the counter reaches K, we will return the last prime number found
Step 1: Define a function is_prime that takes a number as input and returns True if it is a prime number, False otherwise.
Step 2: Define a function kth_prime_naive that takes two inputs, N and K, and returns the Kth prime number greater than N using a naive approach.
Step 3: Initialize a count variable to 0.
Step 4: Loop through all numbers from N+1 to N+K^2.
Step 5: Check whether each number is a prime number using the is_prime function. If it is, increment the count variable.
Step 6: If the count variable is equal to K, return the current number.
Step 7: If the loop completes without finding K prime numbers, return None.
C++
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime( int num) {
if (num < 2) {
return false ;
}
for ( int i = 2; i <= sqrt (num); i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
int kthPrimeNaive( int N, int K) {
int count = 0;
for ( int i = N + 1; ; i++) {
if (isPrime(i)) {
count++;
if (count == K) {
return i;
}
}
}
}
int main() {
cout << kthPrimeNaive(5, 5) << endl;
cout << kthPrimeNaive(10, 3) << endl;
return 0;
}
|
Java
import java.util.Scanner;
public class KthPrimeNaive {
static boolean isPrime( int num) {
if (num < 2 ) {
return false ;
}
for ( int i = 2 ; i <= Math.sqrt(num); i++) {
if (num % i == 0 ) {
return false ;
}
}
return true ;
}
static int kthPrimeNaive( int N, int K) {
int count = 0 ;
for ( int i = N + 1 ; ; i++) {
if (isPrime(i)) {
count++;
if (count == K) {
return i;
}
}
}
}
public static void main(String[] args) {
int N = 5 ;
int K = 5 ;
System.out.println(kthPrimeNaive(N, K));
N = 10 ;
K = 3 ;
System.out.println(kthPrimeNaive(N, K));
}
}
|
Python3
def is_prime(num):
if num < 2 :
return False
for i in range ( 2 , int (num * * 0.5 ) + 1 ):
if num % i = = 0 :
return False
return True
def kth_prime_naive(N, K):
count = 0
for i in range (N + 1 , N + K * * 2 ):
if is_prime(i):
count + = 1
if count = = K:
return i
return None
print (kth_prime_naive( 5 , 5 ))
print (kth_prime_naive( 10 , 3 ))
|
C#
using System;
class Program
{
static bool IsPrime( int num)
{
if (num < 2)
{
return false ;
}
for ( int i = 2; i <= Math.Sqrt(num); i++)
{
if (num % i == 0)
{
return false ;
}
}
return true ;
}
static int KthPrimeNaive( int N, int K)
{
int count = 0;
for ( int i = N + 1; ; i++)
{
if (IsPrime(i))
{
count++;
if (count == K)
{
return i;
}
}
}
}
static void Main()
{
Console.WriteLine(KthPrimeNaive(5, 5));
Console.WriteLine(KthPrimeNaive(10, 3));
}
}
|
Javascript
function isPrime(num) {
if (num < 2) {
return false ;
}
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
return false ;
}
}
return true ;
}
function kthPrimeNaive(N, K) {
let count = 0;
for (let i = N + 1; count < K * K; i++) {
if (isPrime(i)) {
count++;
if (count === K) {
return i;
}
}
}
return null ;
}
console.log(kthPrimeNaive(5, 5));
console.log(kthPrimeNaive(10, 3));
|
Time Complexity: O(N*K)
Space Complexity: O(1)
Last Updated :
28 Oct, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...