Biorąc pod uwagę liczbę N, wyzwanie polega na uzyskaniu sumy piramidy N liczb pierwszych. Aby to wyjaśnić, oto przykład:
Input: 4
4
Wymienimy pierwsze liczby pierwsze, a następnie obliczymy ich sumę. Następnie obliczymy sumy sum i tak dalej:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Widać, że końcowy wynik to 33 . Oto inny przykład z 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
Widać, że końcowy wynik to 1169 .
Oto kolejny przykład z nieparzystym N, N = 3:
2
> 5
3 > 13
> 8
5
To daje nam 13 w rezultacie
Twoim zadaniem jest napisanie programu lub funkcji, która przyjmuje liczbę całkowitą większą od 0, i generuje wynik końcowy.
Oto kilka wyników testu:
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
To jest golf golfowy , więc wygrywa najmniejsza ilość bajtów!
[1169]
Dla8
) jest dopuszczalne?Odpowiedzi:
J, 15 bajtów
Wyjaśnienie:
Zasadniczo to samo, co moja odpowiedź Mathematica .
źródło
Mathematica,
383635 bajtówźródło
Minkolang 0,14 , 17 bajtów
Wypróbuj tutaj i sprawdź tutaj wszystkie przypadki testowe .
Wyjaśnienie
Używam zasadniczo tego samego algorytmu, co kilka wcześniejszych odpowiedzi, które używają współczynników dwumianowych. Ilekroć widzisz dodawanie takiej piramidy liczb, najpierw przychodzi na myśl trójkąt Pascala. Nie widzę, aby żadna z pozostałych odpowiedzi wyjaśniała, dlaczego to działa, więc zrobię to.
WIĘCEJ wyjaśnienia
Jak widać,
2,3,5,7
pojawiają się liczby pierwsze1,3,3,1
w wyniku końcowym. Pozwól mi trochę zmienić układ.Liczba przypadków, w których
3
przyczyni się do końcowego wyniku, jest taka sama, jak liczba ścieżek od3
lewego do górnego rogu, przesuwając się tylko w górę i w lewo . Istnieją trzy takie ścieżki dla3
:Zauważ, że mogę odwrócić kierunek bez utraty ogólności. Chcę więc wiedzieć, ile jest ścieżek od lewego górnego rogu do każdej pozycji wzdłuż poszarpanej krawędzi. Mogę ich tak policzyć ...
Dla każdej liczby w tym trójkącie, jeśli jest to X jednostek od lewej i Y jednostek od góry, wówczas liczba w tej pozycji wynosi
Jednak sposób, w jaki go używam,
X+Y = N
jest stały iX
wynosi od 0 doN
, co przebiega wzdłuż jednej przekątnej. Mnożyłem każdy współczynnik przez odpowiednią liczbę pierwszą, a następnie sumuję.Więcej informacji na ten temat znajduje się w artykule w Wikipedii na temat trójkąta Pascala .
źródło
JavaScript ES7 107
Nadużywanie ustalonego limitu 27 - jak nudne jest znajdowanie liczb pierwszych.
Testowy fragment kodu (przy użyciu interpretacji tablic będzie działał tylko w przeglądarce Firefox)
źródło
Pyth, 18 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
s*V.cLtQUQ.f}ZPZQ0
Pyth -
1615 bajtówUżywa zmniejszania i
first_n
filtrowania.Pakiet testowy .
źródło
Pyth, 16 bajtów
Właściwie bardzo proste:
źródło
Haskell, 74 bajty
Przykład użycia:
Jak to działa: wielokrotnie obliczaj sumy sąsiadów wszystkich liczb pierwszych. Przejmij głowę
n
iteracji.Ponieważ operator indeksu
!!
jest oparty na zerach, przygotowuję pustą listę, aby uniknąć konieczności używania!!(n-1)
.źródło
Matlab, 76 bajtów
Dzięki Davidowi za zaoszczędzenie wielu bajtów!
Stara wersja, 98 bajtów
źródło
x
użyciux=primes(103);
oszczędza kilka bajtów, ponieważ wystarczy tylko udać się doN=27
(i to nie ma znaczenia, czyx
ma więcej wpisów niż trzeba).conv
był jednak świetnym pomysłem!JavaScript (ES6), 121 bajtów
Wyjaśnienie
Większość wielkości pochodzi ze znalezienia liczb pierwszych.
Test
Pokaż fragment kodu
źródło
Narzędzia Shell + GNU i BSD, 92
źródło
Poważnie, 23 bajty
Wysyła wynik jako listę o długości 1:
8 -> [1169]
Wypróbuj online
Wyjaśnienie:
źródło
Mathematica 73 bajty
Jak to działa
Prime@n~Table~{n,#}&
daje listę pierwszych#
liczb pierwszych.Partition[#,2,1]&
zmienia kolejność liczb,{a, b, c, d ...}
jak{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
następnie wraca{a+b, b+c, c+d...}
.NestWhile
zaczyna się od listy#
liczb pierwszych i ma zastosowanie wielokrotnie,Plus@@@Partition...
o ile na liście znajduje się więcej niż jedna liczba.Rozwiązanie zajmuje pierwsze 1/5 sekundy dla pierwszych 1000 liczb pierwszych.
źródło
Python 2, 159 bajtów
źródło
print
polecenie wewnątrz pętli? Nie chcesz drukować tylko raz, na końcu?Droga Mleczna 1.4.8 ,
2625 bajtówTa odpowiedź nie konkuruje. Niektóre operacje zostały utworzone po opublikowaniu tego pytania (ale niekoniecznie w przypadku tego wyzwania).
Po przeczytaniu komentarzy udało mi się usunąć bajt. Dane wyjściowe to lista jednoelementowa.
Wyjaśnienie
Stosowanie
źródło
Cejlon, 169 bajtów
Definiuje to dwie funkcje -
s
oblicza sumę piramidy sekwencji liczb całkowitych, natomiastp
wywołując ją na podstawie sekwencji pierwszegon
liczb pierwszych.Wygląda na to, że około połowa wielkości znajduje pierwszą
n
liczby pierwsze, a druga połowa oblicza sumę piramidy.Oto sformatowana / skomentowana wersja:
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Początkowo napisałem odpowiedź Brachylog
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
, ale kiedy pojawiła się 19 bajtów, zdecydowałem, że prawdopodobnie powinienem spróbować innego języka.Najwyraźniej odwzorowanie na liczbę traktuje ją jako zakres od 1 do siebie włącznie, a liczby całkowite sortuje się jako większe niż listy lub cokolwiek innego
''
.źródło
APL (NARS), 41 znaków, 82 bajty
W danych wejściowych, jeśli chce się użyć dużej liczby, należy wpisać typ liczba_x jako 47x. Może być coś nie tak: tutaj piszę, że n liczb pierwszych znajduje się w zestawie 1..n ^ 2 Test:
źródło
Perl 6 , 52 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera argument i drukuje listę jednego elementu zawierającą wynik.
źródło
Stax , 13 bajtów
Uruchom i debuguj
źródło