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 n
dígitos dePi
Ejemplos
Porque n=3
debemos 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 12
porque [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 Pi
si 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 (
p
vectorises)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þŒÙpO
debería funcionar para 8 bytesp
vectorises 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 96
El 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
n
como entrada.Utiliza
numbers::dropletPi(50)
para generar los primeros 50 lugares decimales de pi.gsub
elimina el punto decimal.substring
toma todas las subcadenas posibles (sorpresa sorpresa) de pi hastan
.La lista devuelta se aplana y se convierte en
gmp
'sbigz
formato. Este formato es necesario para almacenar enteros de longitud 50.unique
toma 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 un0
en pi. Esto conduce a subcadenas con un cero a la izquierda.as.bigz
produceNA
s 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 labigz
representación de3
es iterable, porsapply
lo que se confundirá e informará 16 primos. Para este fin, tomamos el mínimo de la longitud del vectorx
y la cantidad de primos en él.gmp::isprime
parece que no puede manejar confiablemente los grandes números de manera confiable. Entonces, en su lugar, usamosgmp::factorize
y verificamos que la longitud de la salida es 1.Entonces, en general, eliminamos
0
yNA
dex
. Factorizamos todox
y verificamos la longitud. Contamos el número de ocurrencias de1
y 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