Específicamente, el PRIMEGAME de Conway .
Este es un algoritmo ideado por John H. Conway para generar números primos usando una secuencia de 14 números racionales:
A B C D E F G H I J K L M N
17 78 19 23 29 77 95 77 1 11 13 15 15 55
-- -- -- -- -- -- -- -- -- -- -- -- -- --
91 85 51 38 33 29 23 19 17 13 11 14 2 1
Por ejemplo, F es la fracción 77/29.
Así es como el algoritmo encuentra los números primos. Comenzando con el número 2, encuentre la primera entrada en la secuencia que, cuando se multiplica, produce un número entero. Aquí es M, 15/2que produce 15. Luego, para ese número entero 15, encuentre la primera entrada en la secuencia que cuando se multiplica produce un número entero. Ese es el último N, o 55/1, que rinde 825. Escribe la secuencia correspondiente. (El astuto entre ustedes puede reconocer esto como un programa FRACTRAN ).
Después de algunas iteraciones, obtendrá lo siguiente:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Tenga en cuenta que el último elemento de la lista es 4, o 2^2. ¡Mira nuestro primer número primo (el 2exponente) generado con este algoritmo! Finalmente, la secuencia tendrá el siguiente aspecto:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
Por lo tanto, arrojando los números primos. Este es OEIS A007542 .
El reto
Dado un número de entrada n, ya sea cero o uno indexado (su elección), puede generar los primeros nnúmeros de esta secuencia o generar el nnúmero th de esta secuencia.
Ejemplos
Los siguientes ejemplos muestran el ntérmino th de la secuencia indexada a cero.
n output
5 2275
19 4
40 408
Reglas
- Si corresponde, puede suponer que la entrada / salida se ajustará al tipo entero nativo de su idioma.
- La entrada y salida se pueden dar por cualquier método conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
408.0en lugar de 408por ejemplo.