Bei einer gegebenen Zahl N besteht die Herausforderung darin, die Summe der Pyramide von N Primzahlen zu erhalten. Zur Verdeutlichung hier ein Beispiel:
Input: 4
Wir werden die ersten 4
Primzahlen auflisten und dann die Summe daraus berechnen. Danach berechnen wir die Summen der Summen und so weiter:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Sie können sehen, dass das Endergebnis 33 ist . Hier ist ein weiteres Beispiel mit 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
Sie können sehen, dass das Endergebnis 1169 ist .
Hier ist ein weiteres Beispiel mit einem ungeraden N, N = 3:
2
> 5
3 > 13
> 8
5
Dies ergibt 13 als Ergebnis
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die eine ganze Zahl größer als 0 annimmt und das Endergebnis ausgibt.
Hier sind einige Testergebnisse:
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
Das ist Code-Golf , also gewinnt die kürzeste Anzahl von Bytes!
[1169]
für8
) akzeptabel?Antworten:
J, 15 Bytes
Erläuterung:
Grundsätzlich das gleiche wie meine Mathematica-Antwort .
quelle
Mathematica,
383635 Bytesquelle
Minkolang 0,14 , 17 Bytes
Probieren Sie es hier aus und prüfen Sie alle Testfälle hier .
Erläuterung
Ich verwende im Grunde den gleichen Algorithmus wie einige der früheren Antworten, die Binomialkoeffizienten verwenden. Immer wenn Sie eine solche Pyramide von Zahlen sehen, sollte Pascals Dreieck als erstes in den Sinn kommen. Ich sehe nicht, dass eine der anderen Antworten erklärt hat, warum dies funktioniert, also mache ich das.
MEHR Erklärung
Wie Sie sehen können,
2,3,5,7
erscheinen die Primzahlen1,3,3,1
im Endergebnis. Ich ändere das Layout ein wenig.Die Häufigkeit, mit der der
3
Wille zum Endergebnis beiträgt, entspricht der Anzahl der Pfade von3
der oberen linken Ecke nach oben und links . Hier gibt es drei solcher Pfade für die3
:Beachten Sie, dass ich die Richtung ohne Verlust der Allgemeinheit umkehren kann. Ich möchte also wissen, wie viele Pfade es von der oberen linken Ecke zu jeder Position entlang der gezackten Kante gibt. Ich kann sie so zählen ...
Wenn es sich bei jeder Zahl in diesem Dreieck um X-Einheiten von links und Y-Einheiten von oben handelt, lautet die Zahl an dieser Position
Die Art und Weise, wie ich es benutze,
X+Y = N
ist jedoch konstant undX
reicht von 0 bisN
, was entlang einer Diagonale geht. Ich multipliziere jeden Koeffizienten mit der entsprechenden Primzahl und addiere alles auf.Lesen Sie dazu den Wikipedia-Artikel über Pascals Dreieck .
quelle
JavaScript ES7 107
Missbrauch der festen Grenze bei 27 - wie langweilig das Finden der Primzahlen ist.
Test-Snippet (mit Array-Verständnis funktioniert es nur in Firefox)
quelle
Pyth, 18 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
s*V.cLtQUQ.f}ZPZQ0
Pyth -
1615 BytesVerwendet reduzieren und
first_n
filtern.Test Suite .
quelle
Pyth, 16 Bytes
Eigentlich ganz einfach:
quelle
Haskell, 74 Bytes
Anwendungsbeispiel:
So funktioniert es: Berechnen Sie wiederholt die Nachbarsummen aller Primzahlen. Nehmen Sie den Kopf der
n
Iteration.Da der
!!
Indexoperator auf Null basiert, stelle ich eine leere Liste voran, um die Verwendung zu vermeiden!!(n-1)
.quelle
Matlab, 76 Bytes
Vielen Dank an David für das Speichern vieler Bytes!
Alte Version, 98 Bytes
quelle
x
unter Verwendungx=primes(103);
spart einige Bytes, da Sie nur brauchen zu gehenN=27
(und es spielt keine Rolle , wennx
mehr Einträge, als Sie benötigen).conv
war eine gute Idee , aber!JavaScript (ES6), 121 Byte
Erläuterung
Die meisten der Größe kommt von Primzahlen zu finden.
Prüfung
Code-Snippet anzeigen
quelle
Shell + GNU- und BSD-Dienstprogramme, 92
quelle
Im Ernst, 23 Bytes
Gibt das Ergebnis als Liste der Länge 1 aus:
8 -> [1169]
Probieren Sie es online aus
Erläuterung:
quelle
Mathematica 73 Bytes
Wie es funktioniert
Prime@n~Table~{n,#}&
gibt eine Liste der ersten#
Primzahlen.Partition[#,2,1]&
umlagert eine Liste von Zahlen,{a, b, c, d ...}
wie{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
dann kehrt zurück{a+b, b+c, c+d...}
.NestWhile
beginnt mit der Liste der#
Primzahlen und gilt wiederholt,Plus@@@Partition...
solange die Liste mehr als eine Zahl enthält.Es dauert etwa 1/5 sec für die ersten 1000 Primzahlen zu lösen.
quelle
Python 2, 159 Bytes
quelle
print
Befehl innerhalb der Schleife? Wollen Sie nicht nur einmal, am Ende drucken?Milchstraße 1.4.8 ,
2625 BytesDiese Antwort ist nicht im Wettbewerb. Einige der Vorgänge wurden erstellt, nachdem diese Frage gestellt wurde (jedoch nicht unbedingt für diese Herausforderung).
Ich war in der Lage, ein Byte nach dem Lesen durch die Kommentare zu entfernen. Die Ausgabe ist eine Einzelelementliste.
Erläuterung
Verwendung
quelle
Ceylon, 169 Bytes
Dies definiert zwei Funktionen -
s
berechnet die Pyramide Summe einer Folge von ganzen Zahlen, währendp
Anrufe dies auf der Sequenz der erstenn
Primzahlen.Es sieht so aus, als ob ungefähr die Hälfte der Größe die ersten
n
Primzahlen findet, die andere Hälfte berechnet die Pyramidensumme.Hier ist eine formatierte / kommentierte Version:
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Ursprünglich schrieb ich eine Brachylog-Antwort,
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
aber als es 19 Bytes wurden, entschied ich, dass ich wahrscheinlich eine andere Sprache ausprobieren sollte.Anscheinend behandelt die Zuordnung über eine Zahl diese als einen Bereich von 1 bis einschließlich sich selbst, und ganze Zahlen werden als größer als Listen oder was auch immer sortiert
''
.quelle
APL (NARS), 41 Zeichen, 82 Byte
Wenn Sie bei der Eingabe eine große Zahl verwenden möchten, müssen Sie den Typ number_x als 47x eingeben. Es könnte etwas nicht ok sein: ich schreibe hier, dass n Primzahlen in der Menge 1..n ^ 2 Test sind:
quelle
Perl 6 , 52 Bytes
Probieren Sie es online!
Anonymer Codeblock, der ein Argument annimmt und eine Liste mit einem Element mit dem Ergebnis ausgibt.
quelle
Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
quelle