2012-08-05 22 views
6

¿Cuál es la función más simple que genera una lista de números primos hasta el argumento? No es difícil encontrar una función como esta, por ejemplo:Mathematica: genera una lista de números primos hasta un límite

foo[n_] := Block[{A = {}, p = 2}, 
      While[p < n, A = Append[A, p]; p = NextPrime[p]]; 
      A] 

Sin embargo, esto parece excesivamente complicado. Me gustaría hacer algo como

foo[n_] := Table[Prime[i], {i,2,???}] 

¿Dónde ??? es el índice de NextPrime[n,-1]. es posible?

+0

Puede que le interese saber que hay un [sitio StackExchange específico de Mathematica] (http://mathematica.stackexchange.com/). Al programar en Mathematica, siempre es bueno verificar todos los usos de 'While', [' For'] (http://mathematica.stackexchange.com/q/2158/8), 'Do' y' Append'. Son resacas de otros idiomas y (como muestran las respuestas a continuación), hay [enfoques generalmente más concisos en Mathematica] (http://mathematica.stackexchange.com/q/7924/8). – Verbeia

Respuesta

6

Por ejemplo

f[x_] := Prime[[email protected]@x] 

Uso

Grid[Table[{x, f[x]}, {x, 13, 20}], Frame -> All] 

Mathematica graphics

+0

Gracias. La parte que me faltaba (la llamé ???, básicamente la inversa de 'Prime'), era' PrimePi' – user1339898

0

Uno de los algoritmos comunes para esto es el Sieve of Eratosthenes. Es un algoritmo sencillo y razonablemente fácil de implementar en cualquier idioma.

+3

El OP no solicita un algoritmo, sino una función específica en un idioma específico. Además, el idioma en cuestión tiene las primitivas necesarias ya disponibles. Mire las etiquetas antes de responder. –

2

Mi forma favorita:

p = Prime ~Array~ [email protected]# &; 

p @ 20 

{2, 3, 5, 7, 11, 13, 17, 19}

Cuestiones relacionadas