Especificamente, o PRIMEGAME de Conway .
Este é um algoritmo desenvolvido por John H. Conway para gerar números primos usando uma sequência de 14 números racionais:
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 exemplo, F é a fração 77/29
.
Então, aqui está como o algoritmo encontra os números primos. Começando com o número 2
, encontre a primeira entrada na sequência que, quando multiplicadas juntas, produz um número inteiro. Aqui é M
, 15/2
que produz 15
. Em seguida, para esse número inteiro 15
, encontre a primeira entrada na sequência que, quando multiplicada, produz um número inteiro. Esse é o último N
, ou 55/1
, que produz 825
. Anote a sequência correspondente. (Os astutos entre vocês podem reconhecer isso como um programa FRACTRAN .)
Após algumas iterações, você obterá o seguinte:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Observe que o último item listado é 4
, ou 2^2
. Veja nosso primeiro número primo (o 2
expoente) gerado com este algoritmo! Eventualmente, a sequência terá a seguinte aparência:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
Assim, produzindo os números primos. Este é o OEIS A007542 .
O desafio
Dado um número de entrada n
, indexado com zero ou um (sua escolha), produz os primeiros n
números dessa sequência ou o n
th número dessa sequência.
Exemplos
Os exemplos abaixo estão exibindo o n
termo th da sequência indexada a zero.
n output
5 2275
19 4
40 408
Regras
- Se aplicável, você pode supor que a entrada / saída caiba no tipo Inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas por qualquer método conveniente .
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
fonte
408.0
em vez de408
por exemplo.Respostas:
Python 3 ,
173 165 153 145 144 136 135 127 126 125 108 107104 bytesExperimente online!
2>>n*2
é2
paran==0
e de0
outra forma.103 bytes se pudermos retornar carros alegóricos.
fonte
FRACTRAN , 99 bytes
Experimente online!
O programa toma
2*31^n
como uma entrada, que é usada como o estado inicial.Todas as frações do programa FRACTRAN original foram divididas por 31 (o primeiro registro primário não utilizado), portanto, o programa para na enésima iteração.
fonte
Geléia ,
4943 bytesExperimente online!
fonte
0ọ0¤
éinf
, caso contrário você poderia ter reduzido este a 42 bytes ...Python 3 , 107 bytes
Experimente online!
Codifica a lista de frações
zip
inserindo duas cadeias de caracteres contendo caracteres imprimíveis de baixo ASCII.Se
n
for zero, retornamos o argumentok
; caso contrário, recorremos a novos parâmetros. Nosso novok
é o primeiro valork*a//b
correspondente a alguma fração(a, b)
da lista, quek*a//b
é um número inteiro, ou sejak*a%b<1
.fonte
MATL , 50 bytes
Experimente online!
fonte
Hi:
... aww, "Olá" para você também, código. :-)J ,
116110 bytesExperimente online!
Indexado a 0; retorna o n-ésimo número
Alguns bytes podem ser salvos tornando o verbo tácito, mas tenho problemas para
^:
trabalho.Explicação:
J descreve os números racionais na forma NrD, onde N é o numerador e D é o denominador, por exemplo
17r91 78r85 19r51 23r38...
, criei 2 listas separadas para os numeradores e denominadores e fiz 2 números base-96 a partir deles.1047856500267924709512946135x%&(96#.inv])5405040820893044303890643137x
converte os números da base-96 em listas e constrói uma lista de frações dividindo as duas listas.2
comece com 2^:y
repita o verbo non
tempo esquerdo (y é o argumento da função)]
o argumento correto (começa em 2 e depois usa o resultado de cada iteração)*
multiplique a lista de frações pelo argumento correto(=<.)
são os resultados inteiros (compare cada número com seu piso){.@I.@
localiza o índiceI.
do primeiro{.
dos inteiros{[
usa o índice para recuperar o númerofonte
('0m26<l~l *,..V'%&(31x-~3&u:)'ztRE@<620,*-! ')&(0{*#~0=1|*)2:
05AB1E ,
4443 bytesIndexado a 0
Experimente online!
Explicação
O grande número pressionado é
17781923297795770111131515559185513833292319171311140201
fonte
Pari / GP , 121 bytes
Experimente online!
fonte
JavaScript (Node.js) ,
10695 bytesExperimente online!
fonte
Buffer
. Além disso, acho seguro colocar todos os dados em um único buffer: 95 bytes .Retina , 213 bytes
Experimente online! Explicação:
Substitua a entrada por uma lista de todas as frações, mais o número inteiro inicial.
Converta tudo em unário.
Repita a substituição o número de vezes indicado pela entrada original.
Encontre um denominador que divida uniformemente o número inteiro.
Substitua o número inteiro pelo resultado da divisão multiplicada pelo numerador.
Converta o número inteiro em decimal e produza o resultado.
fonte
Anexo , 81 bytes
Experimente online! Emite uma fração acima de 1. Por exemplo, a entrada
5
retorna2275/1
. Isso pode ser corrigido com mais 2 bytes, acrescentandoN@
ao programa.Explicação
Esta é uma função ao curry, que ao curry
Nest
com dois argumentos predefinidos:e
2
. Esse último argumento é simplesmente a semente inicial, e o argumento que é passado para essa função é o número de iterações para aninhar a função especificada.O seguinte é usado para codificar PRIMEGAME:
Isso é avaliado como tal:
Vamos substituir esta expressão por
G
na explicação. Nossa primeira função se torna:Isso executa uma única iteração do código FRACTRAN
_
, a entrada para a função. ÉFind
umIntegral
membro (um que é um número inteiro) da matriz_*G
, que é a entrada_
multiplicada por cada membro deG
.Nest
simplesmente aplica essa transformação o número especificado de vezes.Anexo, 42 bytes
Eu implementei partes da
$langs
biblioteca, sendo inspirado por esse desafio, então marquei esta seção como não competitiva.Isso simplesmente consulta a lista que
FRACTRAN_EXAMPLES
eu tenho. Cada exemplo é umaFractranExample
instância, que chama aFRACTRAN
função embutida. Oprime
exemplo é o PRIMEGAME de Conway.fonte
F # (Mono) , 215 bytes
Experimente online!
fonte
PHP, 183 bytes (189 com a tag "php")
Golfe:
Ungolfed:
Experimente online!
fonte