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


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


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.



Improved By : Harshit Saini