Los primos están en todas partes ...
se esconden dentro de Pi
3.141592653 58979 3238 462643 3832 795028841 971693993751
¡Consigamos esos primos!
El reto
Dado como entrada un número entero n>0, descubra cuántos primos están ocultos dentro de los primeros ndígitos dePi
Ejemplos
Porque n=3debemos buscar primos en [3,1,4]. Hay 2 Primes (3,31), por lo que su código debería generar 2
Para n=10, los primeros 10 dígitos son [3,1,4,1,5,9,2,6,5,3]y su código debería generar 12porque [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]estaban ocultos (¡y encontrados!)
Casos de prueba
entrada -> salida
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
Reglas
Su código debe poder encontrar todos los números primos, al menos paran=50
Sí, puede codificar los primeros 50 dígitos de Pisi le gusta
.
Este es el código de golf. ¡La respuesta más corta en bytes gana!

Respuestas:
05AB1E ,
108 bytes-2 bytes gracias a Adnan (
pvectorises)Pruébalo en línea! (funcionará hasta n = 98413 pero será muy lento incluso para n = 50 debido a la necesidad de probar números tan grandes para primalidad - TIO agota el tiempo de espera en 60 segundos para n = 50).
¿Cómo?
fuente
<žsþŒÙpOdebería funcionar para 8 bytespvectorises gracias!Mathematica, 76 bytes
fuente
Tr[1^...]Esa es una forma inteligente de encontrar la longitud de la lista, ¡bien!Mathematica,
1049790 bytesJajajaja, logré hacer que esto funcione. No tengo idea de cómo usar Mathematica. XD
Entrada:
fuente
50 96El OP dice que 50 dígitos contienen 93 primos, por lo que la precisión de Sympy podría estar apagada ...Python 3 ,
274237207194189 bytes-37 bytes gracias a Wheat Wizard! -14 bytes gracias a Mr.Xcoder.
Codifica los primeros 50 dígitos de pi pero calcula manualmente todo lo demás.
Pruébalo en línea!
fuente
l=list("31415...)debería guardar ~ 40 caracteres. Y ese cambio te permite reemplazarmap(str,i)con soloi.len(l)R,
156123 bytesSolución súper interesante. Trabajando en una adecuada.
Guardado 33 bytes gracias a @Giuseppe.
R (+ números y gmp), 198 bytes
Solución adecuada Toma
ncomo entrada.Utiliza
numbers::dropletPi(50)para generar los primeros 50 lugares decimales de pi.gsubelimina el punto decimal.substringtoma todas las subcadenas posibles (sorpresa sorpresa) de pi hastan.La lista devuelta se aplana y se convierte en
gmp'sbigzformato. Este formato es necesario para almacenar enteros de longitud 50.uniquetoma los valores únicos de ese vector. Este resultado se almacena enx.Luego verificamos la primalidad. Esto es complicado, porque hay un montón de casos extremos y molestias:
Para alto
n, hay un0en pi. Esto conduce a subcadenas con un cero a la izquierda.as.bigzproduceNAs con eso, que debe eliminarse.En una nota similar, la subcadena
"0"se bloquearágmp::factorize, por lo que también debe eliminarse.Para
n=1,x = 3. Lo cual en sí mismo está bien, pero labigzrepresentación de3es iterable, porsapplylo que se confundirá e informará 16 primos. Para este fin, tomamos el mínimo de la longitud del vectorxy la cantidad de primos en él.gmp::isprimeparece que no puede manejar confiablemente los grandes números de manera confiable. Entonces, en su lugar, usamosgmp::factorizey verificamos que la longitud de la salida es 1.Entonces, en general, eliminamos
0yNAdex. Factorizamos todoxy verificamos la longitud. Contamos el número de ocurrencias de1y devolvemos elmin(occurences, length(x)).fuente
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))lugar de su vector para 123 bytes :)Gelatina ,
5932 bytes-27 bytes gracias a Erik the Outgolfer.
Pruébalo en línea!
Explicación
fuente