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
lde 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
1366661se puede estimar como lo82e5/6que 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
Listableasí 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:
pes la lista infinita de primos (ingenuamente verificando todos losmod x ys para y en[2..x-1]). Tome los primeros10000elementos 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
xarchivo:Corriendo:
Legible:
El programa calcula una secuencia de números primos utilizando
Lcomo "cinta de números" que contiene números primos encontrados saltandoLpara 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"Lse 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
Pcomo clave, el valor de este par (clave, valor) no es relevante para el flujo del programa.Si su clave ya
iestá 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
mawkygawken 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::Utilpara 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
4a2. Si tiene mucho tiempo, puede cambiar la2parte de atrás4, pero esto llevará mucho tiempo. Necesito ajustar el algoritmo para esto.Explicación:
fuente