Reto
Este es simple: dado un entero positivo de hasta 1,000,000, devuelve el número primo más cercano.
Si el número en sí es primo, entonces debe devolver ese número; Si hay dos primos igualmente cercanos al número proporcionado, devuelva el menor de los dos.
La entrada tiene la forma de un entero entero, y la salida también debe tener la forma de un entero.
No me importa cómo tome la entrada (función, STDIN, etc.) o muestre la salida (función, STDOUT, etc.), siempre que funcione.
Este es el código de golf, por lo que se aplican reglas estándar: ¡gana el programa con la menor cantidad de bytes!
Casos de prueba
Input => Output
------ -------
80 => 79
100 => 101
5 => 5
9 => 7
532 => 523
1 => 2

Respuestas:
Gaia , 3 bytes
Pruébalo en línea!
Más bien lento para entradas grandes, pero funciona con suficiente memoria / tiempo.
No estoy seguro de por qué
D⌡implícitamente empuja deznuevo, ¡pero hace que esta sea una respuesta notablemente corta!fuente
JavaScript (ES6), 53 bytes
Pruébalo en línea!
Comentado
fuente
05AB1E , 5 bytes
Pruébalo en línea! o como un conjunto de pruebas
Ineficiente para grandes números
fuente
Ånque " en caso de empate, se impulsa la prima más alta ". Ni siquiera sabía que teníamos esto incorporado, tbh.Octava , 40 bytes
Pruébalo en línea!
Esto utiliza el hecho de que siempre hay un primo entre
ny2*n( teorema de Bertrand-Chebyshev ).Cómo funciona
fuente
Japt , 5 bytes
Pruébalo o ejecuta todos los casos de prueba
fuente
05AB1E , 4 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 31 bytes
Pruébalo en línea!
1000003 es el primo 78499.
Nearestprioriza los valores que aparecen antes en la lista (que son más bajos).fuente
Nearest[Prime@Range@#,#,1]¶ 27Brachylog ,
75 bytesPruébalo en línea!
Guardado 2 bytes gracias a @DLosc.
Explicación
fuente
≜Supongo que estabas pensando desde el principio, mientras que estaba pensando en emparejar y restar y solo más tarde me di cuenta de que tenía que≜hacerlo funcionar. :)Pyth, 10 bytes
Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .
fuente
Jalea ,
97 bytesPruébalo en línea!
Lento para entradas más grandes, pero funciona bien para el rango solicitado. ¡Gracias a @EriktheOutgolfer por guardar 2 bytes!
fuente
_A¥conạ(diferencia absoluta). Ah, yḤrealmente puede ser‘.‘no siempre funcionará? Significa que solo se encontrarán primos hasta n + 1, mientras que el más cercano podría ser n + 2.Python 2 , 71 bytes
Pruébalo en línea!
pp%kabs(k-n)kk-nabsnk.La expresión
k+n-p%k*2*nestá diseñada para dark-nprimos (dondep%k=1) y, de lo contrario, un valor "malo"k+nsiempre es mayor en valor absoluto y, por lo tanto, no afecta al mínimo, de modo que se pasan por alto los no primos.fuente
C (gcc) ,
87767472 bytesOptimización de C # de Innat3 (compilador interactivo de Visual C #), 100 bytes
Pruébalo en línea!
fuente
r!=2es equivalente ar-2,n%++i?0:r++muy probablemente sean%++i||r++.Ordenado , 43 bytes
Pruébalo en línea!
Explicación
Esta es una lambda con parámetro
x. Esto funciona creando la siguiente secuencia:Esto es unir las dos secuencias
]x, -1, -∞](izquierda cerrada, derecha abierta) y[x, ∞](ambas abiertas).Para
x = 80, esto se ve así:Luego, usamos
f↦spara seleccionar todos los elementos dessatisfacciónf. En este caso, filtramos todos los números compuestos, dejando solo los primos. Por lo mismox, esto se convierte en:Luego, usamos
(...)@0para seleccionar el primer miembro de esta secuencia. Como se debe seleccionar el más bajo de los dos, la secuencia que comienzax - 1se empalma primero.Nota: Solo uno de
xyx - 1puede ser primo, por lo que está bien que comience la secuencia empalmadax - 1. Aunque la secuencia podría estar abierta en ambos lados ([x,-1,-∞]), esto innecesariamente incluiríaxdos veces en la secuencia. Entonces, en aras de la "eficiencia", elegí la versión cerrada a la izquierda (también porque me gusta presumir de Tidy).fuente
Factor , 91 bytes
Pruébalo en línea!
fuente
APL (Dyalog Extended) ,
2015 bytes SBCSFunción de prefijo tácito inspirada en la respuesta J de Galen Ivanov .
Pruébalo en línea!
⍳Encuentra uno a través del argumento.¯2⍭enésimos primos de eso⊢(…)Aplica la siguiente función tácita a eso, con el argumento original como argumento izquierdo:⊢los primos⊇indexado por:⍋el grado ascendente (índices que ordenarían ascendente)⍤de|la magnitud (valor absoluto)⍤de-las diferencias⊃elija el primero (es decir, el que tenga la menor diferencia)fuente
Perl 6 , 35 bytes
Pruébalo en línea!
Esto utiliza la técnica de Veitcel para generar la lista,
0, -1, 2, -3pero la simplifica enormemente al($*=-1)*$++usar las variables de estado anónimas disponibles en P6 (originalmente lo tenía-1 ** $++ * $++, pero cuando se juega al golf, el negativo pierde prioridad). Hay un verificador integrado, pero desafortunadamenteuntilevita el valor devuelto automáticamente, por lo que hay un$_exceso de tiempo.fuente
C,
122121104 bytesÚselo llamando a la función
c()y pasando como argumento el número; debería devolver el primo más cercano.Gracias a Encarnación de la ignorancia por
1 byte ahorróuna gran mejora.Pruébalo en línea!
fuente
c()recibe dos parámetros ... Además, probablemente pueda acortar elwhile(1)afor(;;)(sin probar, ya que no entiendo cómo ejecutar su códigoc()pasar solo el primer parámetro. Y tienes razón,for(;;)me ahorra un byte, solo quedan 117 para obtener el primer lugar :)#define r return p(a,i){i=1;while(++i<a)if(a%i<1)r 0;r a>1;}c(a,b){b=a;for(;;b++){if(p(--a))r a;if(p(b))r b;}}. Aquí hay un enlace TIO: tio.run/…Wolfram Language (Mathematica) , 52 bytes
Pruébalo en línea!
fuente
APL (NARS), 38 caracteres, 76 bytes
0π es la prueba de primo, ¯1π el primo anterior, 1π es el próximo primo; prueba:
fuente
J ,
1915 bytesPruébalo en línea!
fuente
Perl 5 , 59 bytes
Pruébalo en línea!
/^.?$|^(..+?)\1+$/es complicado regexp para comprobar prime(-1)**$a*($a++)generar secuencia 0, -1, 2, -3 ...fuente
MathGolf , 10 bytes
Pruébalo en línea.
Explicación:
fuente
Python 2 (Cython) , 96 bytes
Pruébalo en línea!
fuente
r=range;...C # (compilador interactivo de Visual C #) ,
104100 bytesPruébalo en línea!
Explicación:
fuente
Java 8,
8887 bytesPuerto de la respuesta C de @NaturalNumberGuy (primera) , ¡ así que asegúrate de votarlo!
-1 byte gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
Java (JDK) , 103 bytes
Pruébalo en línea!
fuente
;. :) ¿Quieres que elimine mi respuesta? .. No dudes en copiar la explicación.Haskell ,
7974 bytes (gracias a Laikoni)72 bytes como función annonymus (la "f =" inicial podría eliminarse en este caso).
Pruébalo en línea!
código original:
Pruébalo en línea!
Explicación:
fuente
,lugar de&&.(last$ ...)puede serlast(...), y la segunda protección1>0se puede utilizar para un enlace para guardar paréntesis, por ejemploy<-x+n.f=no es necesario contar la inicial . También(-1+n)se puede descartar el paréntesis .VDM-SL , 161 bytes
Un programa completo para ejecutar podría tener este aspecto: vale la pena señalar que los límites del conjunto de primos utilizados probablemente deberían cambiarse si realmente desea ejecutar esto, ya que tomará mucho tiempo ejecutarlo por 1 millón:
Explicación:
fuente
MATL , 6 bytes
Pruébalo en línea!
Liste los primeros
nnúmeros primos y encuentre el más cercano an.fuente
C # (compilador interactivo de Visual C #) , 112 bytes
Pruébalo en línea!
La izquierda se desplaza por 20 en la presentación pero 10 en TIO para que TIO termine para casos de prueba.
fuente