Escriba un programa o función que genere / devuelva los primeros 10000 números primos indexados con números primos.
Si llamamos a la enésima prima p(n)
, esta lista es
3, 5, 11, 17, 31, 41, 59 ... 1366661
porque
p(p(1)) = p(2) = 3
p(p(2)) = p(3) = 5
p(p(3)) = p(5) = 11
p(p(4)) = p(7) = 17
...
p(p(10000)) = p(104729) = 1366661
Las lagunas estándar están prohibidas y los métodos de salida estándar están permitidos. Puede responder con un programa completo, una función con nombre o una función anónima.
Respuestas:
MATLAB / Octave, 25 bytes
No es mucho más sencillo que esto.
fuente
Python, 72 bytes
Esto termina con un "error de índice de lista fuera de rango" después de imprimir los números 10000, que está permitido de manera predeterminada .
Utiliza el método del Teorema de Wilson para generar una lista
l
de los números primos hasta el número 10000. Luego, imprime los números primos con las posiciones en la lista, desplazadas por 1 para la indexación cero, hasta que nos quedemos sin límites después del número 10000.Convenientemente, el límite superior de
1366661
se puede estimar como lo82e5/6
que es1366666.6666666667
, ahorrando un carbón.Me gustaría un método de bucle único, que imprima números primos indexados a medida que los agreguemos, pero parece ser más largo.
fuente
J, 11 bytes
Emite los primos en el formato
Explicación
fuente
Mathematica,
262523 bytesFunción pura que devuelve la lista.
fuente
Listable
así que un simplePrime@Prime@Range@1*^4&
hará@
operador tiene mayor prioridad que^
cuando escribesRange@10^4
? Es el clásico de Mathematica que arruina tu juego de golf. ¡Buen truco!Haskell, 65 bytes
Salidas:
[3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]
No muy rapido. Cómo funciona:
p
es la lista infinita de primos (ingenuamente verificando todos losmod x y
s para y en[2..x-1]
). Tome los primeros10000
elementos de la lista que obtiene cuando se asigna0:p!!
(obtener el enésimo elemento dep
)p
. Tengo que ajustar la lista de números primos de donde tomo los elementos anteponiendo un número (->0:
), porque la función de índice (!!
) está basada en cero.fuente
PARI / GP, 25 bytes
fuente
AWK - 129 bytes
... bueno ... demasiado tiempo para ganar puntos por compacidad ... pero ¿tal vez pueda ganar algo de honor por la velocidad?
El
x
archivo:Corriendo:
Legible:
El programa calcula una secuencia de números primos utilizando
L
como "cinta de números" que contiene números primos encontrados saltandoL
para marcar los números cercanos que ya se sabe que tienen un divisor. Estos números primos saltantes avanzarán mientras la "cinta de números"L
se corta número por número desde su comienzo.Si se corta el cabezal de la cinta al
L[n]
estar vacío, no hay divisor (primario) conocido.L[n]
mantener un valor significa que este valor es primo y se sabe que dividen
.Entonces, hemos encontrado un divisor primo o un nuevo primo. Luego, este primer avance se avanzará al siguiente
L[n+m*p]
en la cinta que se encuentre vacía.Esto es como el Tamiz de Eratóstenes "tirado a través de una botella de Klein". Siempre actúas en el inicio de la cinta. En lugar de disparar múltiplos de primos a través de la cinta, usted usa los primos que ya se encuentran como cursores que saltan del inicio de la cinta por múltiples distancias de su propio valor hasta que se encuentra una posición libre.
Si bien el ciclo externo genera una decisión principal o no primaria por ciclo, los números primos encontrados se cuentan y almacenan
P
como clave, el valor de este par (clave, valor) no es relevante para el flujo del programa.Si su clave ya
i
está enP
(i in P
), tenemos un primo de la raza p (p (i)).Corriendo:
Tenga en cuenta que este código no utiliza tablas primas precalculadas externas.
Tiempo empleado en mi viejo Thinkpad T60, así que creo que merece ser llamado rápido.
Probado con
mawk
ygawk
en Debian8 / AMD64fuente
CJam, 19
Puedes probarlo en línea , pero necesitarás un poco de paciencia: p
Para el registro, el último número es 1366661.
fuente
Perl, 55 bytes
Utiliza el módulo de @DanaJ
Math::Prime::Util
para perl (cargado con el pragmantheory
). Consíguelo con:fuente
05AB1E, 7 bytes (no competitivos)
Código:
Pruébalo en línea! , tenga en cuenta que he cambiado el
4
a2
. Si tiene mucho tiempo, puede cambiar la2
parte de atrás4
, pero esto llevará mucho tiempo. Necesito ajustar el algoritmo para esto.Explicación:
fuente