Given an integer N, the task is to find the minimum number K to be added to N such that N + K becomes a prime number.
Examples:
Input: N = 10
Output: 1
Explanation:
1 is the minimum number to be added to N such that 10 + 1 = 11 is a prime number
Input: N = 20
Output: 3
Approach: The idea is to check whether the number is a prime or not by incrementing the value to be added K by 1 in each iteration. Therefore, the following steps can be followed to compute the answer:
- Initially, check whether the given number is prime or not. If it is, then the value to be added(K) is 0.
- Now, in every iteration, increment the value of N by 1 and check if the number is prime or not. Let the first value at which N becomes a prime is M. Then, the minimum value that needs to be added to make N prime is M – N.
Below is the implementation of the above approach:
C++
// C++ program to find the minimum // number to be added to N to // make it a prime number #include <bits/stdc++.h> using namespace std; // Function to check if a given number // is a prime or not bool isPrime( int n) { // Base cases if (n <= 1) return false ; if (n <= 3) return true ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return false ; // For all the remaining numbers, check if // any number is a factor if the number // or not for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; // If none of the above numbers are the // factors for the number, then the // given number is prime return true ; } // Function to return the smallest // number to be added to make a // number prime int findSmallest( int N) { // Base case if (N == 0) return 2; if (N == 1) return 1; int prime = N, counter = 0; bool found = false ; // Loop continuously until isPrime returns // true for a number greater than n while (!found) { if (isPrime(prime)) found = true ; else { // If the number is not a prime, then // increment the number by 1 and the // counter which stores the number // to be added prime++; counter++; } } return counter; } // Driver code int main() { int N = 10; cout << findSmallest(N); return 0; } |
Java
// Java program to find the minimum // number to be added to N to // make it a prime number import java.util.*; class GFG{ // Function to check if a given number // is a prime or not static boolean isPrime( int n) { // Base cases if (n <= 1 ) return false ; if (n <= 3 ) return true ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0 ) return false ; // For all the remaining numbers, check if // any number is a factor if the number // or not for ( int i = 5 ; i * i <= n; i = i + 6 ) if (n % i == 0 || n % (i + 2 ) == 0 ) return false ; // If none of the above numbers are the // factors for the number, then the // given number is prime return true ; } // Function to return the smallest // number to be added to make a // number prime static int findSmallest( int N) { // Base case if (N == 0 ) return 2 ; if (N == 1 ) return 1 ; int prime = N, counter = 0 ; boolean found = false ; // Loop continuously until isPrime returns // true for a number greater than n while (!found) { if (isPrime(prime)) found = true ; else { // If the number is not a prime, then // increment the number by 1 and the // counter which stores the number // to be added prime++; counter++; } } return counter; } // Driver code public static void main(String[] args) { int N = 10 ; System.out.print(findSmallest(N)); } } // This code is contributed by sapnasingh4991 |
Python3
# Python 3 program to find the minimum # number to be added to N to # make it a prime number # Function to check if a given number # is a prime or not def isPrime(n): # Base cases if (n < = 1 ): return False if (n < = 3 ): return True # This is checked so that we can skip # middle five numbers in below loop if (n % 2 = = 0 or n % 3 = = 0 ): return False # For all the remaining numbers, check if # any number is a factor if the number # or not i = 5 while (i * i < = n ): if (n % i = = 0 or n % (i + 2 ) = = 0 ): return False i + = 6 # If none of the above numbers are the # factors for the number, then the # given number is prime return True # Function to return the smallest # number to be added to make a # number prime def findSmallest(N): # Base case if (N = = 0 ): return 2 if (N = = 1 ): return 1 prime , counter = N, 0 found = False # Loop continuously until isPrime returns # true for a number greater than n while ( not found): if (isPrime(prime)): found = True else : # If the number is not a prime, then # increment the number by 1 and the # counter which stores the number # to be added prime + = 1 counter + = 1 return counter # Driver code if __name__ = = "__main__" : N = 10 print (findSmallest(N)) # This code is contributed by chitranayal |
C#
// C# program to find the minimum // number to be added to N to // make it a prime number using System; class GFG{ // Function to check if a given number // is a prime or not static bool isPrime( int n) { // Base cases if (n <= 1) return false ; if (n <= 3) return true ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return false ; // For all the remaining numbers, check if // any number is a factor if the number // or not for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; // If none of the above numbers are the // factors for the number, then the // given number is prime return true ; } // Function to return the smallest // number to be added to make a // number prime static int findSmallest( int N) { // Base case if (N == 0) return 2; if (N == 1) return 1; int prime = N, counter = 0; bool found = false ; // Loop continuously until isPrime returns // true for a number greater than n while (!found) { if (isPrime(prime)) found = true ; else { // If the number is not a prime, then // increment the number by 1 and the // counter which stores the number // to be added prime++; counter++; } } return counter; } // Driver code public static void Main() { int N = 10; Console.Write(findSmallest(N)); } } // This code is contributed by AbhiThakur |
Javascript
<script> // Javascript program to find the minimum // number to be added to N to // make it a prime number // Function to check if a given number // is a prime or not function isPrime(n) { // Base cases if (n <= 1) return false ; if (n <= 3) return true ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return false ; // For all the remaining numbers, check if // any number is a factor if the number // or not for ( var i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; // If none of the above numbers are the // factors for the number, then the // given number is prime return true ; } // Function to return the smallest // number to be added to make a // number prime function findSmallest(N) { // Base case if (N == 0) return 2; if (N == 1) return 1; var prime = N, counter = 0; var found = false ; // Loop continuously until isPrime returns // true for a number greater than n while (!found) { if (isPrime(prime)) found = true ; else { // If the number is not a prime, then // increment the number by 1 and the // counter which stores the number // to be added prime++; counter++; } } return counter; } // Driver code var N = 10; document.write( findSmallest(N)); // This code is contributed by noob2000. </script> |
1
Time Complexity: O(k*sqrt(k)) (where k = M-N, N = input, M = first prime no.)
Space Complexity: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!