Open In App

Find a prime number S containing given number N in it

Last Updated : 29 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given an integer N, find a prime number S such that all digits of N occur in a contiguous sequence. There may be multiple answers. Print any one of them.

Example:

Input: N = 42
Output: 42013
Explanation: 42013 is a prime and 42 occurs as a contiguous number in it. 15427 is also a correct answer.

Input: N = 47
Output: 47
Explanation: 47 itself is a prime

Naive Approach: Below steps can be followed:

  • Iterate through all the numbers starting from N
  • Convert every number into a string with to_string() function
  • Check for the required substring using str.find() function
  • If there is any number that has N as a substring and it is prime then return that number

Time Complexity: O(S), where S is the required prime number

Efficient Approach: Below steps can be followed:

  • The fact can be used that a number with value upto 1e12, between two consecutive primes, there are at most 464 non-prime numbers.
  • Extend the current number N by multiplying by 1000.
  • After that iterate through the next numbers one by one and check each of them.
  • If the number is prime then print that number.
  • It is easy to see that the first condition will always follow as the digits except the last three will be N.

Below is the implementation of the above approach:

C++




// C++ Implementation for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a number is prime
bool isPrime(long long N)
{
    if (N == 1)
        return false;
    for (long long i = 2; i <= sqrt(N); i++)
 
        // If N is divisible then its not a prime
        if (N % i == 0)
            return false;
    return true;
}
// Function to print a prime number
// which has N as a substring
long long prime_substring_Number(long long N)
{
    // Check for the base case
    if (N == 0) {
        return 103;
 
        // 103 is a prime
    }
 
    // multiply N by 10^3
    // Check for numbers from
    // N*1000 to N*1000 + 464
    N *= 1000;
    for (long long i = N; i < N + 465; i++) {
        if (isPrime(i)) {
            return i;
        }
    }
    return 0;
}
 
// Driver Code
int main()
{
    long N = 42;
    cout << prime_substring_Number(N);
}


Java




/*package whatever //do not write package name here */
import java.io.*;
class GFG {
static boolean isPrime(long N)
{
    if (N == 1)
        return false;
    for (long i = 2; i <= Math.sqrt(N); i++)
 
        // If N is divisible then its not a prime
        if (N % i == 0)
            return false;
    return true;
}
   
// Function to print a prime number
// which has N as a substring
static long prime_substring_Number(long N)
{
    // Check for the base case
    if (N == 0) {
        return 103;
 
        // 103 is a prime
    }
 
    // multiply N by 10^3
    // Check for numbers from
    // N*1000 to N*1000 + 464
    N *= 1000;
    for (long i = N; i < N + 465; i++) {
        if (isPrime(i)) {
            return i;
        }
    }
    return 0;
}
 
// Driver Code
    public static void main(String[] args)
    {
        long N = 42;
        System.out.println(prime_substring_Number(N));
    }
}
 
// This code is contributed by maddler.


Python3




# python Implementation for the above approach
# importing math library
from math import *
 
# Function to check if a number is prime
def isPrime(N) :
    if N > 1:
       
      # Iterate from 2 to n / 2
      for i in range(2, int(N/2)+1):
         
        # If num is divisible by any number between
        # 2 and n / 2, it is not prime
        if (N % i) == 0:
            return False
      else:
        return True 
    else:
        return False
       
# Function to print a prime number
# which has N as a substring
def prime_substring_Number(N) :
   
    # Check for the base case
    if (N == 0) :
        return 103
 
        # 103 is a prime
 
    # multiply N by 10^3
    # Check for numbers from
    # N*1000 to N*1000 + 464
    N =N * 1000
    for i in range(N,N + 465):
        if (isPrime(i)) :
            return i
         
    return 0
 
# Driver Code
N = 42
print(prime_substring_Number(N))
 
# This code is contributed by anudeep23042002.


C#




// C# Implementation for the above approach
using System;
class GFG {
 
    // Function to check if a number is prime
    static bool isPrime(long N)
    {
        if (N == 1)
            return false;
        for (long i = 2; i <= Math.Sqrt(N); i++)
 
            // If N is divisible then its not a prime
            if (N % i == 0)
                return false;
        return true;
    }
    // Function to print a prime number
    // which has N as a substring
    static long prime_substring_Number(long N)
    {
        // Check for the base case
        if (N == 0) {
            return 103;
 
            // 103 is a prime
        }
 
        // multiply N by 10^3
        // Check for numbers from
        // N*1000 to N*1000 + 464
        N *= 1000;
        for (long i = N; i < N + 465; i++) {
            if (isPrime(i)) {
                return i;
            }
        }
        return 0;
    }
 
    // Driver Code
    public static void Main()
    {
        long N = 42;
        Console.WriteLine(prime_substring_Number(N));
    }
}
 
// This code is contributed by ukasp.


Javascript




<script>
        // JavaScript Program to implement
        // the above approach
 
        // Function to check if a number is prime
        function isPrime(N) {
            if (N == 1)
                return false;
            for (let i = 2; i <= Math.sqrt(N); i++)
 
                // If N is divisible then its not a prime
                if (N % i == 0)
                    return false;
            return true;
        }
         
        // Function to print a prime number
        // which has N as a substring
        function prime_substring_Number(N)
        {
         
            // Check for the base case
            if (N == 0) {
                return 103;
 
                // 103 is a prime
            }
 
            // multiply N by 10^3
            // Check for numbers from
            // N*1000 to N*1000 + 464
            N *= 1000;
            for (let i = N; i < N + 465; i++) {
                if (isPrime(i)) {
                    return i;
                }
            }
            return 0;
        }
 
        // Driver Code
        let N = 42;
        document.write(prime_substring_Number(N));
 
// This code is contributed by Potta Lokesh
    </script>


Output

42013

Time Complexity: O(sqrt(N*1000)*300)
Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads