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:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to print the 
// nearest prime number by
// sequentially adding the
// prime numebers 
#include<bits/stdc++.h>
using namespace std;
  
// Function to store prime
// numbers using prime seive
void prime_seive(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 seive function 
    prime_seive(MAX, isprime, prime);
      
    // Keep on adding prime 
    // numbers till the nearest 
    // prime number is acheived 
      
    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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the 
// nearest prime number by
// sequentially adding the
// prime numebers 
import java.util.*;
  
class GFG 
{
  
// Function to store prime
// numbers using prime seive
static void prime_seive(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 seive function 
    prime_seive(MAX, isprime, prime);
      
    // Keep on adding prime 
    // numbers till the nearest 
    // prime number is acheived 
    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


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to print the nearest prime 
# number by sequentially adding the prime numebers 
  
# Function to store prime numbers using prime seive
def prime_seive(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 seive function 
    prime_seive(MAX, isprime, prime)
      
    # Keep on adding prime numbers 
    # till the nearest prime number 
    # is acheived 
    while not isprime[N]:
        N += prime[i]
        i += 1
      
    # return the nearest prime 
    return
    
  
# Driver Code 
N = 8
print(printNearest(N))

chevron_right


C#

// C# program to print the
// nearest prime number by
// sequentially adding the
// prime numebers
using System;
using System.Collections.Generic;

class GFG
{

// Function to store prime
// numbers using prime seive
static void prime_seive(int MAX, int []isprime,
List 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 prime = new List();

// variable to add primes
i = 0;

// call the seive function
prime_seive(MAX, isprime, prime);

// Keep on adding prime
// numbers till the nearest
// prime number is acheived
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

Output:

13


My Personal Notes arrow_drop_up

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.