# Return the Closest Prime Number

## JavaScript (ES6), 53 bytes

n=>(g=(o,d=N=n+o)=>N%--d?g(o,d):d-1?g(o<0?-o:~o):N)


Try it online!

### Commented

n => (            // n = input
g = (           // g = recursive function taking:
o,            //   o = offset
d =           //   d = current divisor, initialized to N
N = n + o     //   N = input + offset
) =>            //
N % --d ?     // decrement d; if d is not a divisor of N:
g(o, d)     //   do recursive calls until it is
:             // else:
d - 1 ?     //   if d is not equal to 1 (either N is composite or N = 1):
g(        //     do a recursive call with the next offset:
o < 0 ? //       if o is negative:
-o    //         make it positive (e.g. -1 -> +1)
:       //       else:
~o    //         use -(o + 1) (e.g. +1 -> -2)
)         //     end of recursive call
:           //   else (N is prime):
N         //     stop recursion and return N
)               // initial call to g with o = [''] (zero-ish)


## 05AB1E, 5 bytes

Åps.x


Try it online! or as a Test Suite

Inefficient for big numbers

## Gaia, 3 bytes

ṅD⌡


Try it online!

Rather slow for large inputs, but works given enough memory/time.

I'm not sure why D⌡ implicitly pushes z again, but it makes this a remarkably short answer!

ṅ	| implicit input z: push first z prime numbers, call it P
D⌡	| take the absolute difference between P and (implicit) z,
| returning the smallest value in P with the minimum absolute difference