Print the nearest prime number formed by adding prime numbers to N

Given a number N. The task is to print the nearest prime if the number is not prime by making it prime by adding prime numbers sequentially from 2.

Examples:

Input: N = 8
Output: 13
8 is not prime, so add the first prime to it to get 10
10 is not prime, hence add the second prime, i.e., 3 to get 13 which is prime.

Input: N = 45
Output: 47

Approach Using Sieve of Eratosthenes, mark the prime index by 1 in isprime[] list and store all the prime numbers in a list prime[]. Keep adding prime numbers sequentially to N, till it becomes prime.



Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print the 
// nearest prime number by
// sequentially adding the
// prime numbers 
#include<bits/stdc++.h>
using namespace std;
  
// Function to store prime
// numbers using prime sieve
void prime_sieve(int MAX, vector<int> &isprime,
                          vector<int> &prime)
{
      
    // iterate for all
    // the numbers 
    int i = 2;
    while (i * i <= MAX)
    {
          
        // If prime[p] is not changed, 
        // then it is a prime
        if (isprime[i] == 1)
        {
              
            // append the prime
            // to the list 
            prime.push_back(i);
              
            // Update all multiples of p
            for (int j = i * 2; j < MAX; j += i)
            {
                isprime[j] = 0;
            }
        }
                  
        i += 1;
    }
}
          
// Function to print 
// the nearest prime 
int printNearest(int N)
{
    int MAX = 1e6;
      
    // store all the 
    // index with 1 
    vector<int> isprime(MAX, 1);
  
    // 0 and 1 are not prime 
    isprime[0] = isprime[1] = 0;
      
    // list to store 
    // prime numbers
    vector<int> prime;
      
    // variable to
    // add primes 
    int i = 0;
      
    // call the sieve function 
    prime_sieve(MAX, isprime, prime);
      
    // Keep on adding prime 
    // numbers till the nearest 
    // prime number is achieved 
      
    while (!isprime[N])
    {
        N += prime[i];
        i += 1;
    }
      
    // return the 
    // nearest prime 
    return N ;
}
  
// Driver Code 
int main()
{
    int N = 8;
    printf("%d", printNearest(N));
    return 0;
}
  
// This code is contributed
// by Harshit Saini
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the 
// nearest prime number by
// sequentially adding the
// prime numbers 
import java.util.*;
  
class GFG 
{
  
// Function to store prime
// numbers using prime sieve
static void prime_sieve(int MAX, int []isprime,
                        Vector<Integer> prime)
{
      
    // iterate for all
    // the numbers 
    int i = 2;
    while (i * i <= MAX)
    {
          
        // If prime[p] is not changed, 
        // then it is a prime
        if (isprime[i] == 1)
        {
              
            // append the prime
            // to the list 
            prime.add(i);
              
            // Update all multiples of p
            for (int j = i * 2;
                     j < MAX; j += i)
            {
                isprime[j] = 0;
            }
        }
                  
        i += 1;
    }
}
          
// Function to print 
// the nearest prime 
static int printNearest(int N)
{
    int MAX = (int) 1e6;
      
    // store all the 
    // index with 1 except 0,1 index 
    int [] isprime = new int[MAX];
    for(int i = 2; i < MAX; i++)
        isprime[i] = 1;
      
    // list to store 
    // prime numbers
    Vector<Integer> prime = new Vector<Integer>();
      
    // variable to add primes 
    int i = 0;
      
    // call the sieve function 
    prime_sieve(MAX, isprime, prime);
      
    // Keep on adding prime 
    // numbers till the nearest 
    // prime number is achieved 
    while (isprime[N] == 0)
    {
        N += prime.get(i);
        i += 1;
    }
      
    // return the 
    // nearest prime 
    return N ;
}
  
// Driver Code 
public static void main(String[] args)
{
    int N = 8;
    System.out.printf("%d", printNearest(N));
}
  
// This code is contributed by Rajput-Ji
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to print the nearest prime 
# number by sequentially adding the prime numbers 
  
# Function to store prime numbers using prime sieve
def prime_sieve(MAX, isprime, prime):
      
    # iterate for all the numbers 
    i = 2
    while (i * i <= MAX):
           
        # If prime[p] is not changed, 
        # then it is a prime
        if (isprime[i] == 1):
              
            # append the prime to the list 
            prime.append(i)
              
            # Update all multiples of p
            for j in range(i * 2, MAX, i):
                isprime[j] = 0
                  
        i += 1
          
          
  
# Function to print the nearest prime 
def printNearest(N):
      
    MAX = 10**6 
      
    # store all the index with 1 
    isprime = [1] * MAX
      
    # 0 and 1 are not prime 
    isprime[0] = isprime[1] = 0 
      
    # list to store prime numbers
    prime = []
      
    # variable to add primes 
    i = 0
      
    # call the sieve function 
    prime_sieve(MAX, isprime, prime)
      
    # Keep on adding prime numbers 
    # till the nearest prime number 
    # is achieved 
    while not isprime[N]:
        N += prime[i]
        i += 1
      
    # return the nearest prime 
    return
    
  
# Driver Code 
N = 8
print(printNearest(N))
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print the 
// nearest prime number by
// sequentially adding the
// prime numbers
using System;
using System.Collections.Generic;
      
class GFG 
{
  
// Function to store prime
// numbers using prime sieve
static void prime_sieve(int MAX, int []isprime,
                        List<int> prime)
{
      
    // iterate for all the numbers 
    int i = 2;
    while (i * i <= MAX)
    {
          
        // If prime[p] is not changed, 
        // then it is a prime
        if (isprime[i] == 1)
        {
              
            // append the prime to the list 
            prime.Add(i);
              
            // Update all multiples of p
            for (int j = i * 2;
                     j < MAX; j += i)
            {
                isprime[j] = 0;
            }
        }
                  
        i += 1;
    }
}
          
// Function to print 
// the nearest prime 
static int printNearest(int N)
{
    int MAX = (int) 1e6;
    int i = 0;
      
    // store all the 
    // index with 1 except 0,1 index 
    int [] isprime = new int[MAX];
    for(i = 2; i < MAX; i++)
        isprime[i] = 1;
      
    // list to store 
    // prime numbers
    List<int> prime = new List<int>();
      
    // variable to add primes 
    i = 0;
      
    // call the sieve function 
    prime_sieve(MAX, isprime, prime);
      
    // Keep on adding prime 
    // numbers till the nearest 
    // prime number is achieved 
    while (isprime[N] == 0)
    {
        N += prime[i];
        i += 1;
    }
      
    // return the 
    // nearest prime 
    return N;
}
  
// Driver Code 
public static void Main(String[] args)
{
    int N = 8;
    Console.Write("{0}", printNearest(N));
}
}
  
// This code is contributed by Princi Singh
chevron_right

Output:
13

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.





Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Article Tags :