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++
#include <bits/stdc++.h>
using namespace std;
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 ;
}
int makePrime( int n) {
int sum = n;
for ( int i=2 ;i< n*n ;i++){
if (isPrime(i)){
sum+=i;
if (isPrime(sum)){
return sum;
}
}
}
return -1;
}
int main() {
int N = 8;
int result = makePrime(N);
cout << result << endl;
return 0;
}
|
Java
import java.util.*;
public class Main {
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 ;
}
static int makePrime( int n)
{
int sum = n;
for ( int i = 2 ; i < n * n; i++) {
if (isPrime(i)) {
sum += i;
if (isPrime(sum)) {
return sum;
}
}
}
return - 1 ;
}
public static void main(String[] args)
{
int N = 8 ;
int result = makePrime(N);
System.out.println(result);
}
}
|
Python3
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
def makePrime(n):
sum = n
for i in range ( 2 , n * n):
if isPrime(i):
sum + = i
if isPrime( sum ):
return sum
return - 1
N = 8
result = makePrime(N)
print (result)
|
C#
using System;
class Program {
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 ;
}
static int MakePrime( int n)
{
int sum = n;
for ( int i = 2; i < n * n; i++) {
if (IsPrime(i)) {
sum += i;
if (IsPrime(sum)) {
return sum;
}
}
}
return -1;
}
static void Main( string [] args)
{
int N = 8;
int result = MakePrime(N);
Console.WriteLine(result);
}
}
|
Javascript
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 makePrime(n) {
let sum = n;
for (let i=2 ;i< n*n ;i++){
if (isPrime(i)){
sum+=i;
if (isPrime(sum)){
return sum;
}
}
}
return -1;
}
let N = 8;
let result = makePrime(N);
console.log(result);
|
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++
#include<bits/stdc++.h>
using namespace std;
void prime_sieve( int MAX, vector< int > &isprime,
vector< int > &prime)
{
int i = 2;
while (i * i <= MAX)
{
if (isprime[i] == 1)
{
prime.push_back(i);
for ( int j = i * 2; j < MAX; j += i)
{
isprime[j] = 0;
}
}
i += 1;
}
}
int printNearest( int N)
{
int MAX = 1e6;
vector< int > isprime(MAX, 1);
isprime[0] = isprime[1] = 0;
vector< int > prime;
int i = 0;
prime_sieve(MAX, isprime, prime);
while (!isprime[N])
{
N += prime[i];
i += 1;
}
return N ;
}
int main()
{
int N = 8;
printf ( "%d" , printNearest(N));
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void prime_sieve( int MAX, int []isprime,
Vector<Integer> prime)
{
int i = 2 ;
while (i * i <= MAX)
{
if (isprime[i] == 1 )
{
prime.add(i);
for ( int j = i * 2 ;
j < MAX; j += i)
{
isprime[j] = 0 ;
}
}
i += 1 ;
}
}
static int printNearest( int N)
{
int MAX = ( int ) 1e6;
int [] isprime = new int [MAX];
for ( int i = 2 ; i < MAX; i++)
isprime[i] = 1 ;
Vector<Integer> prime = new Vector<Integer>();
int i = 0 ;
prime_sieve(MAX, isprime, prime);
while (isprime[N] == 0 )
{
N += prime.get(i);
i += 1 ;
}
return N ;
}
public static void main(String[] args)
{
int N = 8 ;
System.out.printf( "%d" , printNearest(N));
}
}
|
Python3
def prime_sieve( MAX , isprime, prime):
i = 2
while (i * i < = MAX ):
if (isprime[i] = = 1 ):
prime.append(i)
for j in range (i * 2 , MAX , i):
isprime[j] = 0
i + = 1
def printNearest(N):
MAX = 10 * * 6
isprime = [ 1 ] * MAX
isprime[ 0 ] = isprime[ 1 ] = 0
prime = []
i = 0
prime_sieve( MAX , isprime, prime)
while not isprime[N]:
N + = prime[i]
i + = 1
return N
N = 8
print (printNearest(N))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static void prime_sieve( int MAX, int []isprime,
List< int > prime)
{
int i = 2;
while (i * i <= MAX)
{
if (isprime[i] == 1)
{
prime.Add(i);
for ( int j = i * 2;
j < MAX; j += i)
{
isprime[j] = 0;
}
}
i += 1;
}
}
static int printNearest( int N)
{
int MAX = ( int ) 1e6;
int i = 0;
int [] isprime = new int [MAX];
for (i = 2; i < MAX; i++)
isprime[i] = 1;
List< int > prime = new List< int >();
i = 0;
prime_sieve(MAX, isprime, prime);
while (isprime[N] == 0)
{
N += prime[i];
i += 1;
}
return N;
}
public static void Main(String[] args)
{
int N = 8;
Console.Write( "{0}" , printNearest(N));
}
}
|
Javascript
<script>
function prime_sieve(MAX, isprime, prime)
{
var i = 2;
while (i * i <= MAX)
{
if (isprime[i] == 1)
{
prime.push(i);
for ( var j = i * 2; j < MAX; j += i)
{
isprime[j] = 0;
}
}
i += 1;
}
}
function printNearest(N)
{
var MAX = 1e6;
var isprime = Array(MAX).fill(1);
isprime[0] = isprime[1] = 0;
var prime = [];
var i = 0;
prime_sieve(MAX, isprime, prime);
while (!isprime[N])
{
N += prime[i];
i += 1;
}
return N ;
}
var N = 8;
document.write( printNearest(N));
</script>
|
Time Complexity: O(N * log(logN))
Auxiliary Space: O(N)
Last Updated :
11 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...