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