Primos estão por toda parte ...
eles se escondem dentro de Pi
3.141592653 58979 3238 462643 3832 795028841 971693993751
Vamos pegar esses números primos!
O desafio
Dado como entrada um número inteiro n>0
, descubra quantos números primos estão ocultos dentro dos primeiros n
dígitos dePi
Exemplos
Pois n=3
devemos procurar primos em [3,1,4]
. Existem 2 primos (3,31)
, portanto, seu código deve gerar 2
Para n=10
, os 10 primeiros dígitos são [3,1,4,1,5,9,2,6,5,3]
e seu código deve gerar 12
porque [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]
foram ocultados (e encontrados!)
Casos de teste
entrada -> saída
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
Regras
Seu código deve ser capaz de encontrar todos os números primos, pelo menos paran=50
Sim, você pode codificar os 50 primeiros dígitos de Pi
se você gosta de
entradas codificar as respostas são inválidos
Este é o código-golfe . A resposta mais curta em bytes ganha!
Respostas:
05AB1E ,
108 bytes-2 bytes graças a Adnan (
p
vetoriza)Experimente online! (funcionará até n = 98413, mas será muito lento, mesmo para n = 50, devido à necessidade de testar números tão grandes quanto à primalidade - o TIO atinge o tempo limite de 60 segundos para n = 50.)
Quão?
fonte
<žsþŒÙpO
deve funcionar para 8 bytesp
vectorises obrigado!Mathematica, 76 bytes
fonte
Tr[1^...]
Essa é uma maneira inteligente de encontrar o comprimento da lista, legal!Mathematica,
1049790 bytesHahahaha, eu consegui fazer isso funcionar. Não faço ideia de como usar o Mathematica. XD
Entrada:
fonte
50 96
O OP diz que 50 dígitos contêm 93 números primos, então a precisão do Sympy pode estar baixa ..?Python 3 ,
274237207194189 bytes-37 bytes graças ao Wheat Wizard! -14 bytes graças ao Mr.Xcoder.
Codifica os primeiros 50 dígitos do pi, mas calcula manualmente todo o resto.
Experimente online!
fonte
l=list("31415...)
deve economizar ~ 40 caracteres. E essa mudança permite substituirmap(str,i)
por apenasi
.len(l)
R,
156123 bytesSolução super interessante. Trabalhando em um bom.
Economizou 33 bytes graças a @Giuseppe.
R (+ números e gmp), 198 bytes
Solução adequada. Toma
n
como entrada.Usa
numbers::dropletPi(50)
para gerar as primeiras 50 casas decimais de pi.gsub
remove o ponto decimal.substring
toma todas as substring possíveis (surpresa surpresa) de pi atén
.A lista retornada é achatada e convertida para
gmp
obigz
formato de. Este formato é necessário para armazenar números inteiros de comprimento 50.unique
usa os valores exclusivos desse vetor. Este resultado é armazenado emx
.Depois, verificamos a primalidade. Isso é complicado, porque há muitos casos extremos e aborrecimentos:
Para alta
n
, existe um0
em pi. Isso leva a substrings com um zero à esquerda.as.bigz
produzNA
s com isso, que deve ser removido.Em uma nota semelhante, a substring
"0"
falharágmp::factorize
, e também precisará ser removida.Para
n=1
,x = 3
. O que por si só está ok, mas abigz
representação de3
é iterável; portanto,sapply
ficará confuso e relatará 16 primos. Para esse fim, tomamos o mínimo do comprimento do vetorx
e a quantidade de números primos nele.gmp::isprime
parece que não consegue lidar de maneira confiável com grandes números. Então, em vez disso, usamosgmp::factorize
e verificamos se o comprimento da saída é 1.Então, ao todo, removemos
0
eNA
dex
. Nós fatoramos tudox
e verificamos o comprimento. Contamos o número de ocorrências1
e retornamos omin(occurences, length(x))
.fonte
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))
, em vez de seu vetor de 123 bytes :)Geléia ,
5932 bytes-27 bytes graças a Erik, o Outgolfer.
Experimente online!
Explicação
fonte