Related Articles

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

• Difficulty Level : Medium
• Last Updated : 11 Aug, 2021

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

 `// 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[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`

## 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`

## Javascript

 ``
Output:

`13`

Time Complexity: O(N * log(logN))
Auxiliary Space: O(N)

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.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up