GFG App
Open App
Browser
Continue

# 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

Naive Approach : In this approach we add every prime number to given number N until we find the desired output.

• First run the loop from 2 to N*N and find a prime number.
• Then add that prime number to variable sum and check then the new sum formed is prime or not.
• If it is a Prime Number then return sum and if not then find another prime number and perform the same task again until sum become a prime number.

Implementation :

## C++

 `// C++ code for the naive approach`   `#include ` `using` `namespace` `std;`   `// function to check if a number is prime or not` `bool` `isPrime(``int` `n) {` `    ``if` `(n <= 1) {` `        ``return` `false``;` `    ``}` `    ``for` `(``int` `i = 2; i <= n/2; i++) {` `        ``if` `(n % i == 0) {` `            ``return` `false``;` `        ``}` `    ``}` `    ``return` `true``;` `}`   `// function to add all prime numbers to a given number until it becomes a prime number` `int` `makePrime(``int` `n) {` `    ``int` `sum = n;` `      `  `      `  `      ``// to check every number prime or not` `      ``for``(``int` `i=2 ;i< n*n ;i++){` `          `  `          ``// the number is number then add it to sum` `          ``if``(isPrime(i)){` `              ``sum+=i;` `              `  `              ``// check new sum formed is prime or not` `              ``if``(isPrime(sum)){` `                  `  `                  ``// sum is prime then return ans` `                  ``return` `sum;` `              ``}` `          ``}` `      ``}`   `    ``return` `-1;` `}`   `// Driver Code` `int` `main() {` `    ``int` `N = 8;` `  `  `      ``// function call` `    ``int` `result = makePrime(N);` `    ``cout << result << endl;` `    ``return` `0;` `}`   `// this code is contributed by bhardwajji`

## Java

 `// Java code for the naive approach`   `import` `java.util.*;`   `public` `class` `Main {` `    ``// function to check if a number is prime or not` `    ``static` `boolean` `isPrime(``int` `n)` `    ``{` `        ``if` `(n <= ``1``) {` `            ``return` `false``;` `        ``}` `        ``for` `(``int` `i = ``2``; i <= n / ``2``; i++) {` `            ``if` `(n % i == ``0``) {` `                ``return` `false``;` `            ``}` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// function to add all prime numbers to a given number` `    ``// until it becomes a prime number` `    ``static` `int` `makePrime(``int` `n)` `    ``{` `        ``int` `sum = n;`   `        ``// to check every number prime or not` `        ``for` `(``int` `i = ``2``; i < n * n; i++) {` `            ``// the number is number then add it to sum` `            ``if` `(isPrime(i)) {` `                ``sum += i;`   `                ``// check new sum formed is prime or not` `                ``if` `(isPrime(sum)) {` `                    ``// sum is prime then return ans` `                    ``return` `sum;` `                ``}` `            ``}` `        ``}`   `        ``return` `-``1``;` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``8``;`   `        ``// function call` `        ``int` `result = makePrime(N);` `        ``System.out.println(result);` `    ``}` `}` `// This code is contributed by sarojmcy2e`

## Python3

 `# function to check if a number is prime or not` `def` `isPrime(n):` `    ``if` `n <``=` `1``:` `        ``return` `False` `    ``for` `i ``in` `range``(``2``, ``int``(n``/``2``) ``+` `1``):` `        ``if` `n ``%` `i ``=``=` `0``:` `            ``return` `False` `    ``return` `True`   `# function to add all prime numbers to a given number until it becomes a prime number` `def` `makePrime(n):` `    ``sum` `=` `n` `    `  `    ``# to check every number prime or not` `    ``for` `i ``in` `range``(``2``, n``*``n):` `        `  `        ``# the number is number then add it to sum` `        ``if` `isPrime(i):` `            ``sum` `+``=` `i` `            `  `            ``# check new sum formed is prime or not` `            ``if` `isPrime(``sum``):` `                `  `                ``# sum is prime then return ans` `                ``return` `sum` `    `  `    ``return` `-``1`   `# Driver Code` `N ``=` `8`   `# function call` `result ``=` `makePrime(N)` `print``(result)`

## C#

 `using` `System;`   `class` `Program {` `    ``// function to check if a number is prime or not` `    ``static` `bool` `IsPrime(``int` `n)` `    ``{` `        ``if` `(n <= 1) {` `            ``return` `false``;` `        ``}` `        ``for` `(``int` `i = 2; i <= n / 2; i++) {` `            ``if` `(n % i == 0) {` `                ``return` `false``;` `            ``}` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// function to add all prime numbers to a given number` `    ``// until it becomes a prime number` `    ``static` `int` `MakePrime(``int` `n)` `    ``{` `        ``int` `sum = n;`   `        ``// to check every number prime or not` `        ``for` `(``int` `i = 2; i < n * n; i++) {` `            ``// the number is prime then add it to sum` `            ``if` `(IsPrime(i)) {` `                ``sum += i;`   `                ``// check new sum formed is prime or not` `                ``if` `(IsPrime(sum)) {` `                    ``// sum is prime then return ans` `                    ``return` `sum;` `                ``}` `            ``}` `        ``}`   `        ``return` `-1;` `    ``}`   `    ``static` `void` `Main(``string``[] args)` `    ``{` `        ``int` `N = 8;` `        ``// function call` `        ``int` `result = MakePrime(N);` `        ``Console.WriteLine(result);` `    ``}` `}`

## Javascript

 `// JavaScript code for the naive approach`   `// function to check if a number is prime or not` `function` `isPrime(n) {` `if` `(n <= 1) {` `return` `false``;` `}` `for` `(let i = 2; i <= n/2; i++) {` `if` `(n % i == 0) {` `return` `false``;` `}` `}` `return` `true``;` `}`   `// function to add all prime numbers to a given number until it becomes a prime number` `function` `makePrime(n) {` `let sum = n;` `// to check every number prime or not` `for``(let i=2 ;i< n*n ;i++){` `    `  `    ``// the number is number then add it to sum` `    ``if``(isPrime(i)){` `        ``sum+=i;` `        `  `        ``// check new sum formed is prime or not` `        ``if``(isPrime(sum)){` `            `  `            ``// sum is prime then return ans` `            ``return` `sum;` `        ``}` `    ``}` `}`   `return` `-1;` `}`   `// Driver Code` `let N = 8;`   `// function call` `let result = makePrime(N);` `console.log(result);`

Output

`13`

Time Complexity: O((N * N) * N) // run loop from 2 to N*N to find the prime number. and N to check every number is prime or not.
Auxiliary Space: O(1) // no extra space used

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)

My Personal Notes arrow_drop_up