W szczególności PRIMEGAME Conwaya .
Jest to algorytm opracowany przez Johna H. Conwaya w celu generowania liczb pierwszych przy użyciu sekwencji 14 liczb wymiernych:
A B C D E F G H I J K L M N
17 78 19 23 29 77 95 77 1 11 13 15 15 55
-- -- -- -- -- -- -- -- -- -- -- -- -- --
91 85 51 38 33 29 23 19 17 13 11 14 2 1
Na przykład F jest ułamkiem 77/29
.
Oto jak algorytm znajduje liczby pierwsze. Zaczynając od liczby 2
, znajdź pierwszy wpis w sekwencji, który po pomnożeniu razem daje liczbę całkowitą. Tutaj jest to M
, 15/2
, która produkuje 15
. Następnie, dla tej liczby całkowitej 15
, znajdź pierwszy wpis w sekwencji, który po pomnożeniu tworzy liczbę całkowitą. To jest ostatni N
, lub 55/1
, który daje 825
. Zapisz odpowiednią sekwencję. (Bystry spośród was może uznać to za program FRACTRAN .)
Po kilku iteracjach otrzymasz:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Zauważ, że ostatni wymieniony element to 4
lub 2^2
. Oto nasza pierwsza liczba pierwsza ( 2
wykładnik) wygenerowana za pomocą tego algorytmu! Ostatecznie sekwencja będzie wyglądać następująco:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
W ten sposób uzyskujemy liczby pierwsze. To jest OEIS A007542 .
Wyzwanie
Biorąc pod uwagę liczbę wejściową n
, zero lub jedną indeksowaną (do wyboru), albo wypisz pierwsze n
liczby z tej sekwencji, albo n
wypisz numer th tej sekwencji.
Przykłady
Poniższe przykłady przedstawiają n
termin th sekwencji o indeksie zerowym.
n output
5 2275
19 4
40 408
Zasady
- Jeśli ma to zastosowanie, możesz założyć, że wejście / wyjście będzie pasować do rodzimego typu Integer w twoim języku.
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
źródło
408.0
zamiast408
na przykład.Odpowiedzi:
Python 3 ,
173 165 153 145 144 136 135 127 126 125 108 107104 bajtówWypróbuj online!
2>>n*2
jest2
zan==0
i0
inaczej.103 bajty, jeśli możemy zwrócić liczby zmiennoprzecinkowe.
źródło
FRACTRAN , 99 bajtów
Wypróbuj online!
Program przyjmuje
2*31^n
jako dane wejściowe, które są używane jako stan początkowy.Wszystkie frakcje w oryginalnym programie FRACTRAN zostały podzielone przez 31 (pierwszy nieużywany rejestr główny), więc program zatrzymuje się na n-tej iteracji.
źródło
Galaretka ,
4943 bajtówWypróbuj online!
źródło
0ọ0¤
toinf
, w przeciwnym razie może mieć mniejszą to 42 bajtów ...Python 3 , 107 bajtów
Wypróbuj online!
Koduje listę ułamków poprzez wprowadzenie
zip
dwóch bajtów zawierających niedrukowalne znaki o niskim ASCII.Jeśli
n
wynosi zero, zwracamy argumentk
; w przeciwnym razie powracamy z nowymi parametrami. Nasza nowak
to pierwsza wartośćk*a//b
odpowiadająca pewnej części ułamkowej(a, b)
na liście, takiejk*a//b
jak liczba całkowita, tjk*a%b<1
.źródło
MATL , 50 bajtów
Wypróbuj online!
źródło
Hi:
... aww, „Cześć” też do ciebie, kod. :-)J ,
116110 bajtówWypróbuj online!
0-indeksowane; zwraca n-tą liczbę
Niektóre bajty można zapisać, czyniąc czasownik milczącym, ale mam problemy z
^:
działaniem.Wyjaśnienie:
J opisuje liczby wymierne w postaci NrD, gdzie N jest licznikiem, a D jest mianownikiem, na przykład
17r91 78r85 19r51 23r38...
stworzyłem 2 osobne listy dla liczników i mianowników i utworzyłem z nich 2 liczby podstawowe 96.1047856500267924709512946135x%&(96#.inv])5405040820893044303890643137x
konwertuje liczby podstawowe-96 na listy i konstruuje listę ułamków, dzieląc dwie listy.2
zacznij od 2^:y
powtórz czasownik po jego lewej stronien
(y jest argumentem funkcji)]
właściwy argument (zaczyna się od 2, a następnie wykorzystuje wynik każdej iteracji)*
pomnóż listę ułamków przez odpowiedni argument(=<.)
są liczbami całkowitymi wyników (porównaj każdą liczbę z jej podłogą){.@I.@
znajduje indeksI.
pierwszej{.
z liczb całkowitych{[
używa indeksu do pobrania numeruźródło
('0m26<l~l *,..V'%&(31x-~3&u:)'ztRE@<620,*-! ')&(0{*#~0=1|*)2:
05AB1E ,
4443 bajty0-indeksowane
Wypróbuj online!
Wyjaśnienie
Pchnięta jest duża liczba
17781923297795770111131515559185513833292319171311140201
źródło
Pari / GP , 121 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) ,
10695 bajtówWypróbuj online!
źródło
Buffer
. Ponadto myślę, że bezpiecznie jest umieścić wszystkie dane w jednym buforze: 95 bajtów .Retina , 213 bajtów
Wypróbuj online! Wyjaśnienie:
Zamień dane wejściowe na listę wszystkich ułamków plus początkową liczbę całkowitą.
Przekształć wszystko w jedno.
Powtórz podstawienie tyle razy, ile podało oryginalne wejście.
Znajdź mianownik, który równomiernie dzieli liczbę całkowitą.
Zamień liczbę całkowitą na wynik dzielenia pomnożony przez licznik.
Konwertuj liczbę całkowitą na dziesiętną i wyślij wynik.
źródło
Attache , 81 bajtów
Wypróbuj online! Wyprowadza ułamek powyżej 1. Na przykład
5
zwraca dane wejściowe2275/1
. Można to naprawić za pomocą 2 bajtów, przygotowującN@
program.Wyjaśnienie
Jest to funkcja curry, która curry
Nest
z dwoma predefiniowanymi argumentami:a
2
. Ten ostatni argument jest po prostu początkowym ziarnem, a argumentem przekazywanym do tej funkcji jest liczba iteracji zagnieżdżenia danej funkcji.Do zakodowania PRIMEGAME służy:
Jest to oceniane jako takie:
Zastąpmy to wyrażenie
G
w objaśnieniu. Nasza pierwsza funkcja to:Wykonuje to pojedynczą iterację kodu FRACTRAN
_
na wejściu funkcji. JestFind
toIntegral
element (jeden, który jest liczbą całkowitą) tablicy_*G
, która jest wejściem_
pomnożonym przez każdy elementG
.Nest
po prostu stosuje tę transformację określoną liczbę razy.Attache, 42 bajty
Wdrożyłem części
$langs
biblioteki, zainspirowane tym wyzwaniem, dlatego zaznaczam tę część jako niekonkurencyjną.To po prostu odpytuje listę,
FRACTRAN_EXAMPLES
którą mam. Każdy przykład jestFractranExample
instancją, która wywołuje wbudowanąFRACTRAN
funkcję.prime
Przykładem jest PRIMEGAME Conwaya.źródło
F # (mono) , 215 bajtów
Wypróbuj online!
źródło
PHP, 183 bajtów (189 ze znacznikiem „php”)
Gra w golfa:
Nie golfowany:
Wypróbuj online!
źródło