Related Articles
Minimum absolute difference of a number and its closest prime
• Last Updated : 20 Dec, 2018

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up