Выведите ближайшее простое число, образованное добавлением простых чисел к N

Опубликовано: 16 Января, 2022

Дано число N. Задача состоит в том, чтобы вывести ближайшее простое число, если число не является простым, сделав его простым путем последовательного сложения простых чисел, начиная с 2.
Примеры:

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

Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.

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<bits/stdc++.h>
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<Integer> 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<Integer> prime = new Vector<Integer>();
     
    // 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

<script>
 
// Javascript program to print the
// nearest prime number by
// sequentially adding the
// prime numbers
 
// Function to store prime
// numbers using prime sieve
function prime_sieve(MAX, isprime, prime)
{
     
    // iterate for all
    // the numbers
    var 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(i);
             
            // Update all multiples of p
            for (var j = i * 2; j < MAX; j += i)
            {
                isprime[j] = 0;
            }
        }
                 
        i += 1;
    }
}
         
// Function to print
// the nearest prime
function printNearest(N)
{
    var MAX = 1e6;
     
    // store all the
    // index with 1
    var isprime = Array(MAX).fill(1);
 
    // 0 and 1 are not prime
    isprime[0] = isprime[1] = 0;
     
    // list to store
    // prime numbers
    var prime = [];
     
    // variable to
    // add primes
    var 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
var N = 8;
document.write( printNearest(N));
 
// This code is contributed by rrrtnx.
</script>
Output: 
13

 

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.