Minimum absolute difference of a number and its closest prime

Given a positive integer N, the task is to find the absolute difference of N and the prime number closest to N .
Note: The closest prime to N can be either less than, equal to or greater than N.

Examples:

Input: N = 25
Output: 2
For N = 25
Closest prime greater than 25 is 29. So difference is 4.
Closest prime less than 25 is 23. So difference is 2.
The minimum of these two is 2.

Input: N = 2
Output: 0
As 2 itself is a prime number, closest prime number is 2. So difference is 0.

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Approach:

• If N is prime then print 0.
• Else, find the first prime number > N and note its difference with N.
• Then, find the first prime number < N and note its difference with N.
• And print the minimum of these two differences obtained.

Below is the implementation of the above approach:

C++

 // C++ program to find the minimum absolute  // difference between a number and its closest prime    #include    using namespace std;        // Function to check if a number is prime or not      bool isPrime(int N)      {          for (int i = 2; i <= sqrt(N); i++) {              if (N % i == 0)                  return false;          }          return true;      }         // Function to find the minimum absolute difference      // between a number and its closest prime      int getDifference(int N)      {          if (N == 0)              return 2;          else if (N == 1)              return 1;          else if (isPrime(N))              return 0;             // Variables to store first prime          // above and below N          int aboveN = -1, belowN = -1;          int n1;             // Finding first prime number greater than N          n1 = N + 1;          while (true) {              if (isPrime(n1)) {                  aboveN = n1;                  break;              }              else                 n1++;          }             // Finding first prime number less than N          n1 = N - 1;          while (true) {              if (isPrime(n1)) {                  belowN = n1;                  break;              }              else                 n1--;          }             // Variables to store the differences          int diff1 = aboveN - N;          int diff2 = N - belowN;             return min(diff1, diff2);      }     // Driver code  int main() {     int N = 25;     cout << getDifference(N) << endl;     return 0;   // This code is contributed by Ryuga }

Java

 // Java program to find the minimum absolute // difference between a number and its closest prime class GFG {        // Function to check if a number is prime or not     static boolean isPrime(int N)     {         for (int i = 2; i <= Math.sqrt(N); i++) {             if (N % i == 0)                 return false;         }         return true;     }        // Function to find the minimum absolute difference     // between a number and its closest prime     static int getDifference(int N)     {         if (N == 0)             return 2;         else if (N == 1)             return 1;         else if (isPrime(N))             return 0;            // Variables to store first prime          // above and below N         int aboveN = -1, belowN = -1;         int n1;            // Finding first prime number greater than N         n1 = N + 1;         while (true) {             if (isPrime(n1)) {                 aboveN = n1;                 break;             }             else                 n1++;         }            // Finding first prime number less than N         n1 = N - 1;         while (true) {             if (isPrime(n1)) {                 belowN = n1;                 break;             }             else                 n1--;         }            // Variables to store the differences         int diff1 = aboveN - N;         int diff2 = N - belowN;            return Math.min(diff1, diff2);     }        // Driver code     public static void main(String args[])     {         int N = 25;         System.out.println(getDifference(N));     } }

Python3

 # Python 3 program to find the minimum  # absolute difference between a number  # and its closest prime from math import sqrt    # Function to check if a number is # prime or not  def isPrime(N):     k = int(sqrt(N)) + 1     for i in range(2, k, 1):         if (N % i == 0):             return False                return True    # Function to find the minimum absolute  # difference between a number and its  # closest prime  def getDifference(N):     if (N == 0):         return 2     elif (N == 1):         return 1     elif (isPrime(N)):         return 0        # Variables to store first prime      # above and below N      aboveN = -1     belowN = -1                # Finding first prime number      # greater than N      n1 = N + 1     while (True):         if (isPrime(n1)):             aboveN = n1              break                        else:             n1 += 1        # Finding first prime number      # less than N      n1 = N - 1     while (True):         if (isPrime(n1)):             belowN = n1              break                        else:             n1 -= 1        # Variables to store the differences      diff1 = aboveN - N     diff2 = N - belowN         return min(diff1, diff2)        # Driver code  if __name__ == '__main__':     N = 25     print(getDifference(N))    # This code is contributed by # Surendra_Gangwar

C#

 // C# program to find the minimum absolute // difference between a number and its closest prime using System; class GFG {        // Function to check if a number is prime or not     static bool isPrime(int N)     {         for (int i = 2; i <= Math.Sqrt(N); i++) {             if (N % i == 0)                 return false;         }         return true;     }        // Function to find the minimum absolute difference     // between a number and its closest prime     static int getDifference(int N)     {         if (N == 0)             return 2;         else if (N == 1)             return 1;         else if (isPrime(N))             return 0;            // Variables to store first prime          // above and below N         int aboveN = -1, belowN = -1;         int n1;            // Finding first prime number greater than N         n1 = N + 1;         while (true) {             if (isPrime(n1)) {                 aboveN = n1;                 break;             }             else                 n1++;         }            // Finding first prime number less than N         n1 = N - 1;         while (true) {             if (isPrime(n1)) {                 belowN = n1;                 break;             }             else                 n1--;         }            // Variables to store the differences         int diff1 = aboveN - N;         int diff2 = N - belowN;            return Math.Min(diff1, diff2);     }        // Driver code     public static void Main()     {         int N = 25;         Console.WriteLine(getDifference(N));     } } // This code is contributed by  anuj_67..

PHP



Output:

2

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.