Dado um número N, o desafio é obter a soma da pirâmide de N primos. Para esclarecer as coisas, aqui está um exemplo:
Input: 4
4
Listaremos os primeiros números primos e depois calcularemos a soma deles. Depois disso, calcularemos as somas das somas e assim por diante:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Você pode ver que o resultado final é 33 . Aqui está outro exemplo, com N = 8:
2
> 5
3 > 13
> 8 > 33
5 > 20 > 83
> 12 > 50 > 205
7 > 30 > 122 > 495
> 18 > 72 > 290 > 1169
11 > 42 > 168 > 674
> 24 > 96 > 384
13 > 54 > 216
> 30 > 120
17 > 66
> 36
19
Você pode ver que o resultado final é 1169 .
Aqui está outro exemplo com um N, N = 3 ímpar:
2
> 5
3 > 13
> 8
5
Isso nos dá 13 como resultado
Sua tarefa é escrever um programa ou uma função que utilize um número inteiro maior que 0 e gerar o resultado final.
Aqui estão alguns resultados dos testes:
1: 2
2: 5
3: 13
4: 33
5: 83
6: 205
7: 495
8: 1169
9: 2707
10: 6169
11: 13889
12: 30993
13: 68701
14: 151469
15: 332349
16: 725837
17: 1577751
18: 3413221
19: 7349029
20: 15751187
21: 33616925
22: 71475193
23: 151466705
24: 320072415
25: 674721797
26: 1419327223
27: 2979993519
28: 6245693407
29: 13068049163
30: 27297614797
31: 56929779663
32: 118543624847
33: 246475746269
34: 511766428817
35: 1061264813321
36: 2198298700845
37: 4548996804811
38: 9405003164065
39: 19429190057417
40: 40107799133677
41: 82736199371081
42: 170553108953473
43: 351333736092089
44: 723224546040181
45: 1487710742395387
46: 3058157261678325
47: 6282142186547177
48: 12896743408107403
49: 26460652594917673
50: 54262186256186881
51: 111224391050741687
52: 227896496141836195
53: 466805185374509003
54: 955904519939662217
55: 1956988697590280537
56: 4005572366722212927
57: 8196803221276230093
58: 16769645303734608963
59: 34300013739423719561
60: 70136585692535099353
61: 143371352962891226373
62: 292978031452308375001
63: 598482012866917021541
64: 1222083126601616763473
65: 2494459637841415902073
66: 5089478703050176444803
67: 10379794709536133386939
68: 21160351440305258275579
69: 43119914481530819445497
70: 87833066190052490228187
71: 178841897161848754603319
72: 364014682565128163812791
73: 740654046243174781813209
74: 1506496270380756958474835
75: 3063280375436290387756263
76: 6227039507615221644290617
77: 12655020557561801933128885
78: 25712267089927372837530869
79: 52230425385198423845305957
80: 106076955379202815098486497
81: 215397386589448754140867649
82: 437308717912632286770415395
83: 887706233370396897803709611
84: 1801721089699452657985592689
85: 3656329898231436156162865559
86: 7418972676822310377574227797
87: 15051599987013574096449515927
88: 30532404546282900804722616529
89: 61926565462373271494414919017
90: 125582269494835615524470915169
91: 254631689768733901573206365479
92: 516210444730946464864091626473
93: 1046330617753410129672316234861
94: 2120493010460433691014704829565
95: 4296639990460140795780826898943
96: 8704509990931940668688755806845
97: 17631229933967301681217551193565
98: 35706243541395815998303171050377
99: 72298621492552303967009812018997
Isso é código-golfe , então a menor quantidade de bytes vence!
[1169]
para8
) é aceitável?Respostas:
J, 15 bytes
Explicação:
Basicamente, o mesmo que minha resposta do Mathematica .
fonte
Mathematica,
383635 bytesfonte
Minkolang 0.14 , 17 bytes
Experimente aqui e verifique todos os casos de teste aqui .
Explicação
Eu uso basicamente o mesmo algoritmo de várias respostas anteriores que usam coeficientes binomiais. Sempre que você vê uma pirâmide de números sendo adicionada, o triângulo de Pascal deve ser a primeira coisa que vem à mente. Não vejo que nenhuma das outras respostas tenha explicado por que isso funciona, por isso farei isso.
MAIS explicação
Como você pode ver, os números primos
2,3,5,7
aparecem1,3,3,1
vezes no resultado final. Deixe-me mudar um pouco o layout.O número de vezes que
3
isso contribuirá para o resultado final é o mesmo que o número de caminhos do3
canto superior esquerdo, movendo-se apenas para cima e para a esquerda . Aqui, existem três caminhos para o seguinte3
:Note que eu posso reverter a direção sem perda de generalidade. Então, quero saber quantos caminhos existem do canto superior esquerdo para cada posição ao longo da borda irregular. Eu posso contá-los assim ...
Para cada número neste triângulo, se forem X unidades da esquerda e Y unidades da parte superior, o número nessa posição será
O modo como eu o uso
X+Y = N
é constante eX
varia de 0 aN
, que segue uma diagonal. Multiplico cada coeficiente pelo número primo correspondente e, em seguida, some tudo.Veja o artigo da Wikipedia sobre o triângulo de Pascal para mais informações.
fonte
JavaScript ES7 107
Abusar do limite fixo em 27 - como é chato encontrar os números primos.
Snippet de teste (usando a compreensão da matriz, ele funcionará apenas no Firefox)
fonte
Pitão, 18 bytes
Experimente online: Demonstração
Explicação:
fonte
s*V.cLtQUQ.f}ZPZQ0
Pitão -
1615 bytesUsa reduzir e
first_n
filtrar.Conjunto de Teste .
fonte
Pitão, 16 bytes
Muito simples, na verdade:
fonte
Haskell, 74 bytes
Exemplo de uso:
Como funciona: calcule repetidamente as somas vizinhas de todos os números primos. Assuma o comando da
n
iteração.Como o operador de índice
!!
é baseado em zero, estou acrescentando uma lista vazia para evitar a necessidade de usar!!(n-1)
.fonte
Matlab, 76 bytes
Agradecemos a David por salvar muitos bytes!
Versão antiga, 98 bytes
fonte
x
usox=primes(103);
salva alguns bytes, pois você só precisa ir atéN=27
(e não importa sex
há mais entradas do que você precisa).conv
foi uma ótima idéia!JavaScript (ES6), 121 bytes
Explicação
A maior parte do tamanho vem da busca dos números primos.
Teste
Mostrar snippet de código
fonte
Utilitários Shell + GNU e BSD, 92
fonte
Sério, 23 bytes
Emite o resultado como uma lista de comprimento 1:
8 -> [1169]
Experimente online
Explicação:
fonte
Mathematica 73 bytes
Como funciona
Prime@n~Table~{n,#}&
fornece uma lista dos primeiros#
números primos.Partition[#,2,1]&
reorganiza uma lista de números,{a, b, c, d ...}
como{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
então retorna{a+b, b+c, c+d...}
.NestWhile
começa com a lista de#
números primos e se aplica repetidamentePlus@@@Partition...
, desde que haja mais de um número na lista.Demora cerca de 1/5 s para resolver os primeiros 1000 números primos.
fonte
Python 2, 159 bytes
fonte
print
comando dentro do loop? Você não deseja imprimir apenas uma vez, no final?Via Láctea 1.4.8 ,
2625 bytesEsta resposta não está competindo. Algumas das operações foram criadas após a publicação desta pergunta (mas não necessariamente para esse desafio).
Consegui remover um byte depois de ler os comentários. Saída é uma lista de elemento único.
Explicação
Uso
fonte
Ceilão, 169 bytes
Isso define duas funções -
s
calcula a soma da pirâmide de uma sequência de números inteiros, enquanto ap
chama na sequência dos primeirosn
números primos.Parece que cerca da metade do tamanho encontra os primeiros
n
números primos, a outra metade calcula a soma da pirâmide.Aqui está uma versão formatada / comentada:
fonte
Geléia , 7 bytes
Experimente online!
Originalmente, escrevi uma resposta do Brachylog
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
, mas quando saiu com 19 bytes, decidi que provavelmente deveria tentar um idioma diferente.Aparentemente, o mapeamento sobre um número o trata como um intervalo de 1 a ele mesmo, e os números inteiros são maiores que as listas ou o que quer que
''
seja.fonte
APL (NARS), 41 caracteres, 82 bytes
Na entrada, se alguém quiser usar um número grande, deve digitar o tipo número_x como 47x. Pode haver algo não ok: escrevo aqui que n primos estão no conjunto 1..n ^ 2 Teste:
fonte
Perl 6 , 52 bytes
Experimente online!
Bloco de código anônimo que aceita um argumento e imprime uma lista de um elemento contendo o resultado.
fonte
Stax , 13 bytes
Execute e depure
fonte