Escreva um programa ou função que produz / retorna os primeiros 10000 números primos indexados a prim.
Se chamarmos o enésimo primeiro p(n)
, esta lista será
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
As brechas padrão são proibidas e os métodos de saída padrão são permitidos. Você pode responder com um programa completo, uma função nomeada ou uma função anônima.
Respostas:
MATLAB / oitava, 25 bytes
Não é muito mais simples do que isso.
fonte
Python, 72 bytes
Isso termina com um "erro de índice fora da faixa da lista" depois de imprimir os 10000 números, o que é permitido por padrão .
Usa o método Theorem de Wilson para gerar uma lista
l
dos primos até o 10000º primo. Em seguida, imprime os números primos com as posições na lista, deslocadas por 1 para indexação zero, até ficarmos sem limites após o 10000º primo -ésimo primo.Convenientemente, o limite superior de
1366661
pode ser estimado como82e5/6
o que é1366666.6666666667
, economizando um carvão animal.Eu gostaria de um método de loop único, imprimindo números primos indexados à medida que os adicionamos, mas parece ser mais longo.
fonte
J, 11 bytes
Produz os números primos no formato
Explicação
fonte
Mathematica,
262523 bytesFunção pura retornando a lista.
fonte
Listable
tão simples dePrime@Prime@Range@1*^4&
fazer@
operador tem maior precedência do que^
ao escreverRange@10^4
? É o Mathematica clássico que atrapalha o seu jogo de golfe. Bom truque!Haskell, 65 bytes
Saídas:
[3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]
Não é muito rápido. Como funciona:
p
é a lista infinita de números primos (verificando ingenuamente todos osmod x y
s por y in[2..x-1]
). Pegue os primeiros10000
elementos da lista que você obtém quando0:p!!
(obter o enésimo elemento dep
) é mapeadop
. Eu tenho que ajustar a lista de números primos de onde eu pego os elementos acrescentando um número (->0:
), porque a função de índice (!!
) é zero.fonte
PARI / GP, 25 bytes
fonte
AWK - 129 bytes
... ok ... tempo demais para ganhar pontos por compacidade ... mas talvez consiga ganhar alguma honra pela velocidade?
O
x
arquivo:Corrida:
Legível:
O programa calcula um fluxo de números primos usando
L
como "fita de números" segurando números primos pulandoL
para sinalizar os números próximos já conhecidos por terem um divisor. Esses primos de salto avançam enquanto a "fita de números"L
é cortada número por número desde o início.Ao cortar a cabeça da fita
L[n]
vazia, não há um divisor (principal) conhecido.L[n]
manter um valor significa que esse valor é primo e conhecido por dividirn
.Então, encontramos um divisor primo ou um novo primo. O ths prime será avançado para o próximo
L[n+m*p]
na fita que estiver vazia.É como a peneira de Eratóstenes "puxada pela garrafa de Klein". Você sempre age no início da fita. Em vez de disparar múltiplos primos pela fita, use os primos já encontrados como cursores que saltam para longe da fita iniciando por várias distâncias de seu próprio valor até encontrar uma posição livre.
Enquanto o loop externo gera uma decisão de prime ou não de prime por loop, os primos encontrados são contados e armazenados
P
como chave, o valor desse par (chave, valor) não é relevante para o fluxo do programa.Se a chave deles já estiver
i
emP
(i in P
), temos um primo da raça p (p (i)).Corrida:
Leve em consideração que esse código não usa tabelas primárias pré-calculadas externas.
Tempo gasto no meu bom e velho Thinkpad T60, então acho que ele merece ser chamado rapidamente.
Testado com
mawk
egawk
no Debian8 / AMD64fonte
CJam, 19
Você pode experimentá-lo online , mas precisará de um pouco de paciência: p
Para o registro, o último número é 1366661.
fonte
Perl, 55 bytes
Usa o módulo @DanaJ
Math::Prime::Util
para perl (carregado com o pragmantheory
). Obtenha com:fonte
05AB1E, 7 bytes (não concorrente)
Código:
Experimente online! , note que eu mudei o
4
para a2
. Se você tiver muito tempo, poderá2
voltar para4
, mas isso levará uma muito tempo. Eu preciso apertar o algoritmo para isso.Explicação:
fonte