Related Articles
Print the nearest prime number formed by adding prime numbers to N
• Difficulty Level : Medium
• Last Updated : 08 Jun, 2020

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ program to print the ``// nearest prime number by``// sequentially adding the``// prime numbers ``#include``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 = isprime = 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`

## Java

 `// 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 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 prime = ``new` `Vector();``     ` `    ``// 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`

## Python3

 `# 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` `N ``   ` ` ` `# Driver Code ``N ``=` `8``print``(printNearest(N))`

## C#

 `// 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`
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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up