Dado un número N, el desafío es obtener la suma de la pirámide de N primos. Para aclarar las cosas, aquí hay un ejemplo:
Input: 4
Enumeraremos los primeros 4
números primos y luego calcularemos la suma de ellos. Después de eso, calcularemos las sumas de las sumas, y así sucesivamente:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Puedes ver que el resultado final es 33 . Aquí hay otro ejemplo, con 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
Puedes ver que el resultado final es 1169 .
Aquí hay otro ejemplo con un N impar, N = 3:
2
> 5
3 > 13
> 8
5
Esto nos da 13 como resultado
Su tarea es escribir un programa o una función, que toma un número entero mayor que 0, y genera el resultado final.
Aquí hay algunos resultados de la prueba:
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
Este es el código de golf , por lo que gana la menor cantidad de bytes.
[1169]
for8
)?Respuestas:
J, 15 bytes
Explicación:
Básicamente lo mismo que mi respuesta de Mathematica .
fuente
Mathematica,
383635 bytesfuente
Minkolang 0.14 , 17 bytes
Pruébelo aquí y verifique todos los casos de prueba aquí .
Explicación
Utilizo básicamente el mismo algoritmo que varias de las respuestas anteriores que usan coeficientes binomiales. Siempre que veas que se agrega una pirámide de números, el triángulo de Pascal debería ser lo primero que se te ocurra. No veo que ninguna de las otras respuestas haya explicado por qué esto funciona, así que lo haré.
Más explicación
Como puede ver, los números primos
2,3,5,7
aparecen1,3,3,1
veces en el resultado final. Déjame cambiar un poco el diseño.El número de veces que
3
contribuirá al resultado final es el mismo que el número de caminos desde la3
esquina superior izquierda, moviéndose solo hacia arriba y hacia la izquierda . Aquí, hay tres caminos para el3
:Tenga en cuenta que puedo invertir la dirección sin pérdida de generalidad. Así que quiero saber cuántos caminos hay desde la esquina superior izquierda a cada posición a lo largo del borde irregular. Puedo contarlos así ...
Para cada número en este triángulo, si son unidades X desde la izquierda e unidades Y desde la parte superior, entonces el número en esa posición es
Sin embargo, la forma en que lo uso
X+Y = N
es constante yX
varía de 0 aN
, que va en una diagonal. Multiplico cada coeficiente con el número primo correspondiente y luego sumo todo.Consulte el artículo de Wikipedia sobre el triángulo de Pascal para obtener más información al respecto.
fuente
JavaScript ES7 107
Abusando del límite fijo en 27: qué aburrido es realmente encontrar los números primos.
Fragmento de prueba (utilizando la comprensión de la matriz, solo funcionará en Firefox)
fuente
Pyth, 18 bytes
Pruébelo en línea: demostración
Explicación:
fuente
s*V.cLtQUQ.f}ZPZQ0
Pyth -
1615 bytesUsos reducen y
first_n
filtran.Test Suite .
fuente
Pyth, 16 bytes
Muy simple en realidad:
fuente
Haskell, 74 bytes
Ejemplo de uso:
Cómo funciona: calcula repetidamente las sumas vecinas de todos los números primos. Tome la cabeza de la
n
iteración.Como el operador de índice
!!
está basado en cero, estoy anteponiendo una lista vacía para evitar tener que usar!!(n-1)
.fuente
Matlab, 76 bytes
¡Gracias a David por guardar muchos bytes!
Versión anterior, 98 bytes
fuente
x
usandox=primes(103);
ahorra algunos bytes, ya que solo necesita subirN=27
(y no importa six
tiene más entradas de las que necesita).conv
¡Fue una gran idea!JavaScript (ES6), 121 bytes
Explicación
La mayor parte del tamaño proviene de encontrar los números primos.
Prueba
Mostrar fragmento de código
fuente
Utilidades Shell + GNU y BSD, 92
fuente
En serio, 23 bytes
Emite el resultado como una lista de longitud 1:
8 -> [1169]
Pruébalo en línea
Explicación:
fuente
Mathematica 73 bytes
Cómo funciona
Prime@n~Table~{n,#}&
da una lista de los primeros#
números primos.Partition[#,2,1]&
reorganiza una lista de números,{a, b, c, d ...}
como{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
luego regresa{a+b, b+c, c+d...}
.NestWhile
comienza con la lista de#
primos y se aplica repetidamentePlus@@@Partition...
siempre que haya más de un número en la lista.Tarda aproximadamente 1/5 de segundo para resolver los primeros 1000 primos.
fuente
Python 2, 159 bytes
fuente
print
comando dentro del bucle? ¿No quieres imprimir solo una vez, al final?Vía Láctea 1.4.8 ,
2625 bytesEsta respuesta no es competitiva. Algunas de las operaciones se crearon después de publicar esta pregunta (pero no necesariamente para este desafío).
Pude eliminar un byte después de leer los comentarios. La salida es una lista de un solo elemento.
Explicación
Uso
fuente
Ceilán, 169 bytes
Esto define dos funciones:
s
calcula la suma piramidal de una secuencia de enteros, mientras quep
llama a esto en la secuencia de los primerosn
números primos.Parece que aproximadamente la mitad del tamaño está encontrando los primeros
n
números primos, la otra mitad está calculando la suma de la pirámide.Aquí hay una versión formateada / comentada:
fuente
Jalea , 7 bytes
Pruébalo en línea!
Originalmente escribí una respuesta Brachylog
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
, pero cuando llegó a 19 bytes decidí que probablemente debería probar un idioma diferente.Aparentemente, el mapeo sobre un número lo trata como un rango de 1 a sí mismo inclusive, y los enteros se clasifican como mayores que las listas o lo que
''
sea.fuente
APL (NARS), 41 caracteres, 82 bytes
En la entrada, si se quiere usar un número grande, se debe ingresar el tipo number_x como 47x. Podría haber algo que no está bien: aquí escribo que n primos están en el conjunto 1..n ^ 2 Prueba:
fuente
Perl 6 , 52 bytes
Pruébalo en línea!
Bloque de código anónimo que toma un argumento e imprime una lista de un elemento que contiene el resultado.
fuente
Stax , 13 bytes
Ejecutar y depurarlo
fuente