Dziwi mnie, że tego wyzwania już nie ma, ponieważ jest to takie oczywiste. (Lub jestem zaskoczony, że nie mogłem go znaleźć i ktoś oznaczy go jako duplikat).
Zadanie
Biorąc pod uwagę nieujemną liczbę całkowitą , oblicz sumę pierwszych liczb pierwszych i wyślij ją.
Przykład 1
Dla pierwsze pięć liczb pierwszych to:
- 2)
- 3)
- 5
- 7
- 11
Suma tych liczb wynosi , więc program musi wyprowadzić .
Przykład nr 2
Dla , pierwsze „pierwsze zero” są zerowe. A suma bez liczb wynosi - oczywiście - 0 .
Zasady
- Możesz użyć wbudowanych funkcji, np. Aby sprawdzić, czy liczba jest liczbą pierwszą.
- To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów w każdym języku!
Odpowiedzi:
Procedura kodu maszynowego 6502 , 75 bajtów
Oczekuje wskaźnika do tymczasowego przechowywania w
$fb
/$fc
i liczby liczb pierwszych do podsumowania$2
. Zwraca sumę wA
(rejestr accu).Nigdy nie przeprowadziłem niektórych sprawdzeń wstępnych w kodzie maszynowym 6502, więc w końcu nadchodzi;)
Zauważ, że zaczyna to dawać błędne wyniki dla danych wejściowych> = 14. Jest to spowodowane przepełnieniem, kod działa z „naturalnym” zakresem liczb 8-bitowej platformy, która jest
0 - 255
dla bez znaku .Skomentowano demontaż
Przykładowy program asemblerowy C64 wykorzystujący procedurę:
Demo online
Kod w składni ca65 :
źródło
Python 2 , 49 bajtów
Używa Twierdzenie Wilsona (jak wprowadzono do serwisu przez XNOR, wierzę tutaj )
Wypróbuj online!
Funkcja( n - 1 ) ! ≡ - 1 ( modn )
f
jest rekurencyjna, z początkowym wejściemn
i ogonem, gdyn
osiąga zero, dając to zero (z powodu logikiand
);n
jest zmniejszane za każdym razemt
, gdy liczba testowa, która rośnie przy każdym połączeniuf
, jest liczbą pierwszą. Pierwszym testem jest zatem, czy dla którego trzymamy ślad kwadratu silni w.p
źródło
Galaretka , 4 bajty
Mój pierwszy program galaretki
Wypróbuj online!
źródło
ÆN€S
to też by zrobiło.05AB1E , 3 bajty
Wypróbuj online.
Wyjaśnienie:
źródło
Java 8, 89 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Perl 6 , 31 bajtów
Wypróbuj online!
is-prime
Wbudowany jest niestety długa.źródło
J , 8 bajtów
Wypróbuj online!
źródło
Brachylog ,
87 bajtówWypróbuj online!
Zapisano 1 bajt dzięki @sundar.
Wyjaśnienie
źródło
~lṗᵐ≠≜+
wydaje się działać, dla 7 bajtów (Ciekawe też, dlaczego daje wyjście 2 * wejście + 1, jeśli jest uruchamiane bez etykietowania).[2,+inf)
oczywisty sposób. Dlatego wie, że suma 5 liczb pierwszych (jeśli wejście wynosi 5) musi wynosić co najmniej10
, a częściowo wie, że ponieważ elementy muszą być różne, nie mogą być wszystkie 2, więc przynajmniej11
. Implementacja niejawnej etykietowania TL; DR nie jest wystarczająco silna.Łuska , 4 bajty
Wypróbuj online!
Σ↑
źródło
İ€
jest skończony.Attache , 10 bajtów
Wypróbuj online!
ho hum
źródło
Siatkówka , 41 bajtów
Wypróbuj online! Chciałem dodawać 1, dopóki nie znajdę
n
liczb pierwszych, ale nie mogłem wymyślić, jak to zrobić w Retinie, więc skorzystałem z zagnieżdżonej pętli. Wyjaśnienie:Zacznij od 1.
n
Czasy pętliUtwórz kopię poprzedniej wartości i zwiększ ją.
Zwiększaj go, dopóki jest złożony. (
)
Zamyka zewnętrzną pętlę.)Usuń oryginał
1
.Suma i przelicz na dziesiętny.
źródło
MATL , 4 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
PHP, 66 bajtów
używając mojej własnej funkcji podstawowej ponownie ...
Uruchom jako potok z
-nr
lub spróbuj online .awaria
źródło
for(;$argn;$i-1||$s+=$n+!$argn--)for($i=++$n;--$i&&$n%$i;);echo$s;
Haskell , 48 bajtów
Wypróbuj online!
\p-> all((>0).mod p)[2..p-1]
True
źródło
C (gcc) , 70 bajtów
Wypróbuj online!
źródło
n=s
zamiastreturn s
C, C ++, D:
147142 bajtówOptymalizacja 5 bajtów dla C i C ++:
-2 bajty dzięki Zacharýowi
p
sprawdza, czy liczba jest liczbą pierwszą,f
sumujen
pierwsze liczbyKod użyty do przetestowania:
C / C ++:
D Zoptymalizowana odpowiedź: Zacharý ,
133131 bajtówD ma system szablonów golfy
źródło
T p(T)(T a){if(a<4)return 1;for(T i=2;i<a;)if(!(a%i++))return 0;return 1;}T f(T)(T n){T c,v=1;while(n)if(p(++v)){c+=v;--n;}return c;}
. Ponadto C / C ++ / D może byćint p(int a){if(a<4)return 1;for(int i=2;i<a;++i)if(!(a%i))return 0;return 1;}int f(int n){int c=0,v=1;while(n)if(p(++v)){c+=v;--n;}return c;}
(to samo z optymalizacją C / C ++, po prostu dostosowując algorytm abit){c+=v;--n;}
byćc+=v,--n;
?int
s):T p(T)(T a){T r=1,i=2;for(;i<a;)r=a%i++?r:0;return r;}T f(T)(T n){T c,v=1;while(n)if(p(++v))c+=v,--n;return c;}
a>3&i<a
zamiasti<a
usuńif(a<4)...
Japt
-x
, 11 bajtówWypróbuj online!
Zaoszczędzono kilka bajtów dzięki nowej funkcji języka.
Wyjaśnienie:
źródło
JavaScript (ES6), 55 bajtów
Wypróbuj online!
źródło
Stax , 6 bajtów
Uruchom i debuguj
Wyjaśnienie:
źródło
APL (Dyalog Unicode) , 7 + 9 = 16 bajtów
Wypróbuj online!
9 dodatkowych bajtów do importowania
pco
(i każdego innego) Dfn:⎕CY'dfns'
W jaki sposób:
źródło
import X
(nowa linia)X.something()
w pythonie jest liczony z nową linią.Rubin, 22 + 7 = 29 bajtów
Uruchom z
ruby -rprime
(+7)źródło
Pari / GP , 20 bajtów
Wypróbuj online!
źródło
JAEL , 5 bajtów
Objaśnienie (generowane automatycznie):
źródło
Python 2 ,
63595651 bajtówWypróbuj online!
Zapisano:
Bez bibliotek:
Python 2 , 83 bajty
Wypróbuj online!
źródło
f=lambda n:n and prime(n)+f(n-1)
oszczędza pięć (może być także golfa)Pyke , 4 bajty
Wypróbuj tutaj!
źródło
CJam , 21 bajtów
Wypróbuj online!
źródło
F #, 111 bajtów
Wypróbuj online!
Seq.initInfinite
tworzy nieskończenie długą sekwencję z funkcją generatora, która przyjmuje jako parametr indeks pozycji. W tym przypadku funkcja generatora jest tylko funkcją tożsamościid
.Seq.filter
wybiera tylko liczby utworzone przez sekwencję nieskończoną, które są liczbą pierwszą.Seq.take
bierze pierwszen
elementy w tej sekwencji.I w końcu
Seq.sum
je podsumowuje.źródło
cQuents , 3 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Z
zamiastz
MY , 4 bajty
Wypróbuj online!
Wciąż żałując, że nie ma niejawnych danych wejściowych / wyjściowych w tym śmieciowym języku, w przeciwnym razie byłyby dwa bajty.
⎕
= wejścieṀ
= 1. ... n-ta liczba pierwsza włącznieΣ
= suma↵
= wynikźródło
APL (NARS), 27 znaków, 54 bajty
{¯2π⍵} tutaj zwróci liczbę pierwszą n różną od 2. Więc {⍵ = 1: 2⋄¯2π⍵-1} zwróci w niej liczbę pierwszą n 2 ...
źródło