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.



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the minimum absolute 
// difference between a number and its closest prime
  
#include <bits/stdc++.h>
  
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
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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..

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the minimum absolute 
// difference between a number and its 
// closest prime
  
// Function to check if a number 
// is prime or not 
function isPrime($N
    for ($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 
function getDifference($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 
    $aboveN = -1; $belowN = -1; 
  
    // 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 
    $diff1 = $aboveN - $N
    $diff2 = $N - $belowN
  
    return min($diff1, $diff2); 
  
// Driver code 
$N = 25; 
echo getDifference($N) . "\n"
  
// This code is contributed
// by Akanksha Rai

chevron_right


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.