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 dez
nuevo, ¡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
Ån
que " 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
n
y2*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.
Nearest
prioriza los valores que aparecen antes en la lista (que son más bajos).fuente
Nearest[Prime@Range@#,#,1]&
para 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!
p
p%k
abs(k-n)
k
k-n
abs
n
k
.La expresión
k+n-p%k*2*n
está diseñada para dark-n
primos (dondep%k=1
) y, de lo contrario, un valor "malo"k+n
siempre 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!=2
es 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↦s
para seleccionar todos los elementos des
satisfacciónf
. En este caso, filtramos todos los números compuestos, dejando solo los primos. Por lo mismox
, esto se convierte en:Luego, usamos
(...)@0
para seleccionar el primer miembro de esta secuencia. Como se debe seleccionar el más bajo de los dos, la secuencia que comienzax - 1
se empalma primero.Nota: Solo uno de
x
yx - 1
puede 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íax
dos 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, -3
pero 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 desafortunadamenteuntil
evita 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>0
se 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
n
nú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