La secuencia
Todos saben que el único número primo par es 2
. Ho-hum Pero, hay ciertos números pares n
donde, cuando se concatenan n-1
, se convierten en un número primo.
Para empezar, 1
no está en la lista, porque 10
no es primo. De manera similar con 2
( 21
) y 3
( 32
). Sin embargo, 4
funciona porque 43
es primo, por lo que es el primer número de la secuencia a(1) = 4
. El siguiente número que funciona (ni 6
( 65
) ni 8
( 87
) funciona) es 10
, porque 109
es primo, entonces a(2) = 10
. Luego nos saltamos un montón más hasta que 22
, porque 2221
es primo, entonces a(3) = 22
. Y así.
Obviamente todos los términos en esta secuencia son pares, porque cualquier número impar n
cuando se concatena con se n-1
convierte en par (como se 3
convierte en 32
), lo que nunca será primo.
Esta es la secuencia A054211 en OEIS.
El reto
Dado un número de entrada n
que encaja en algún lugar de esta secuencia (es decir, n
concatenado con n-1
es primo), genera su posición en esta secuencia. Puede elegir entre 0 o 1 indexado, pero indique cuál en su envío.
Reglas
- Se puede suponer que la entrada y la salida encajan en el tipo entero nativo de su idioma.
- La entrada y la salida se pueden dar en cualquier formato conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
Los siguientes ejemplos están indexados en 1.
n = 4
1
n = 100
11
n = 420
51
fuente
n
es siempre el único número primo divisible porn
. No es especial, así es como funcionan los números primos.Respuestas:
Jalea ,
87 bytesUn enlace monádico que toma un miembro de secuencia y devuelve su índice en la secuencia.
Pruébalo en línea!
¿Cómo?
fuente
zip(head(), pop())
truco es realmente genial. :)Haskell ,
807570 bytes5 bytes de ahorro gracias a Laikoni
Pruébalo en línea!
fuente
p x=all((>0).mod x)[2..x-1]
que falla para 1, pero esto no debería importar en este caso.show x++show(x-1)
se puede acortar ashow=<<[x,x-1]
.show
podría hacerse con un método más corto, pero no pensé en un mapa de concat por alguna razón.Gelatina ,
12, 10, 8 bytesPruébalo en línea!
¡1-2 bytes guardados gracias a @ nmjmcman101, y 2 bytes guardados gracias a @Dennis!
Explicación:
fuente
05AB1E ,
987 bytesCódigo
Utiliza la codificación 05AB1E .Pruébalo en línea!
Explicación
fuente
'0-1'
es primo.Casco ,
131110 bytes1
solución indexada:Pruébalo en línea!
Ungolfed / Explicación
Gracias @ Zgarb por
-3
bytes!fuente
£İp
es equivalente aṗ
. Además, puede guardar un byte con en#…ḣ
lugar de£f…N
.Python 2 , 87 bytes
-2 bytes gracias a @officialaimm . 1 indexado.
Banco de pruebas.
fuente
Pyth , 12 bytes
Pruébalo en línea! o Verifique todos los casos de prueba.
¿Cómo?
fuente
Japt ,
1514121198 bytes1 indexado.
Intentalo
fuente
Æ
yÇ
? Gracias, @Oliver; Actualizaré cuando vuelva a una computadora.2o+X
(con espacio final) funcionaría en lugar de[XXÉ]
, aunque si alguna vez llego a los[]
corchetes de equilibrio automático, su solución será un byte más corta. (En realidad 2, ya que podría hacerloõ_ZÉ]¬nÃèj
)[]
! : DRöda , 73 bytes
Pruébalo en línea!
1 indexado. Utiliza la secuencia para hacer entrada y salida.
Explicación:
fuente
Pyth , 14 bytes
Pruébalo en línea!
Explicación
fuente
lfTmP_s+`d`tdS
, es lamentable que no encontré tu truco solo en ese momento :)Perl 6 , 45 bytes
Pruébalo en línea!
El
grep
produce la secuencia de números calificativos, luego buscamos la clave (:k
) (es decir, el índice) delfirst
número en la lista que equivale al parámetro de entrada$_
.fuente
C,
9994 bytes1 indexado. Me duele escribir pruebas de primalidad que son tan inútiles desde el punto de vista computacional, pero los bytes son bytes después de todo.
Si permitimos algunas cosas realmente frágiles, compilar en mi máquina sin optimizaciones con GCC 7.1.1 los siguientes 94 bytes funcionan (gracias @Conor O'Brien )
de lo contrario, estos 99 bytes mucho más robustos hacen el trabajo
Programa completo, un poco más legible:
fuente
n=c;
lugar dereturn c;
:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
JavaScript (ES6),
49 4847 bytes1 indexado. Limitado por el tamaño de la pila de llamadas de su motor.
Pruébalo en línea!
fuente
Mathematica, 77 bytes
fuente
QBIC , 25 bytes
Explicación
Esto usa algo matemático bastante complicado con un molde de cuerda para una buena medida. Hacer una versión hat hace únicamente concatenación basada en cadenas es un byte más largo:
fuente
PHP , 203 bytes
Pruébalo en línea!
Utiliza un índice basado en 1 para la salida. El enlace TIO tiene la versión legible del código.
fuente
Ruby , 42 + 9 = 51 bytes
Utiliza las
-rprime -n
banderas. 1 indexado.Funciona contando todos los números iguales o inferiores a la entrada que cumple la condición (o más técnicamente, todos los números que cumplen la
n-1
condición). Dado que la entrada está garantizada para estar en la secuencia, no hay riesgo de error de una entrada aleatoria como7
esa que no "se convierte en primo".Pruébalo en línea!
fuente
Ruby , 62 bytes
Pruébalo en línea!
1 indexado
fuente
Python 2 , 85 bytes
1 indexado
Prueba
Mejora a la respuesta del Sr. Xcoder
fuente
Java 8, 108 bytes
0 indexado
Explicación:
Pruébalo en línea.
fuente
Stax , 10 bytes
1- indexado
Ejecutar y depurarlo Explicación
fuente
Ordenado , 33 bytes
Pruébalo en línea!
Explicación
La idea básica es crear una secuencia de los números válidos y luego devolver una función de índice curricular.
fuente