tło
Rozważ następującą sekwencję ( A051935 w OEIS):
- Zacznij od terminu .
- Znajdź najniższą liczbę całkowitą większą niż taką, że jest liczbą pierwszą.
- Znajdź najniższą liczbę całkowitą większą niż taką, że jest liczbą pierwszą itp.
Bardziej formalna definicja:
Pierwsze kilka warunków sekwencji to (określ je jako przypadki testowe):
2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...
Zadanie
Twoim zadaniem jest wygenerowanie tej sekwencji na jeden z następujących sposobów:
- Generuj warunki na czas nieokreślony.
- Biorąc pod uwagę , ( termin, lub indeksowany).
- Biorąc pod uwagę , wyjście (pierwsze wyrażeń).
Możesz konkurować w dowolnym języku programowania i możesz przyjmować dane wejściowe i generować dane wyjściowe za pomocą dowolnej standardowej metody , zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Odpowiedzi:
Brachylog , 13 bajtów
Wypróbuj online!
Dane wyjściowe to lista pierwszych n terminów w sekwencji.
źródło
Python 2 ,
6362 bajtyWypróbuj online!
źródło
Galaretka ,
119 bajtówJest to pełny program, który bierze n jako argument i wypisuje pierwsze n wyrażeń w sekwencji.
Wypróbuj online!
Jak to działa
źródło
05AB1E v2 , 10 bajtów
Wypróbuj online!
Działa to tylko w nie-starszej wersji, przepisz Elixir. Wysyła nieskończony strumień liczb całkowitych. Istnieje kilka błędów z testem podstawowym, które zostały naprawione w najnowszych zatwierdzeniach, ale nie są jeszcze dostępne w TIO. Działa to jednak lokalnie. Oto GIF jego wykonania na moim komputerze, zmodyfikowany tak, aby wyświetlał kilka pierwszych terminów, a nie cały strumień.
Jak to działa
λ
λ
O
Generuje najniższą liczbę pierwszą znacznie większą niż powyższa suma.
Na koniec pobierz bezwzględną różnicę między liczbą pierwszą obliczoną powyżej a pierwszą kopią sumy obliczonej wcześniej (sumą wszystkich poprzednich iteracji).
Strumień jest następnie domyślnie drukowany do STDOUT na czas nieokreślony.
źródło
Perl 6 , 45 bajtów
Wypróbuj online!
Zwraca leniwą listę, która generuje sekwencję bez końca.
Wyjaśnienie:
Używa to operatora sekwencji,
...
który definiuje sekwencję jako:źródło
Rubinowy
-rprime
, 34 bajtyWypróbuj online!
Wydaje na czas nieokreślony.
źródło
JavaScript (ES6), 63 bajty
Wypróbuj online!
źródło
Pyth ,
1211 bajtówWypróbuj online!
Zaoszczędzono 1 bajt dzięki isaacg.
Generuje pierwsze
n
takie liczby na podstawie indeksu 1..f
znajduje pierwszek
liczby całkowite, które spełniają określone kryterium, zaczynając od zera. Tutaj kryterium jest to, że poprzednia liczba pierwsza, którą obliczyliśmy;
, plus bieżąca liczbaZ
, jest liczbą pierwszą (P
). Jeśli tak jest, aktualizujemy również ostatnią obliczoną liczbę pierwszą przy użyciu zachowania logicznego i funkcji (&
) w przypadku zwarcia . Niestety.f
domyślną zmienną jestZ
bajt, który kosztuje aktualizację.Sztuczka, którą wymyślił isaacg, polegała na zapisaniu negacji ostatniej liczby pierwszej i przetestowaniu na niej minus bieżącej wartości. Jest to krótsze w Pyth, ponieważ kontrola pierwotności jest przeciążona: na liczbach dodatnich znajduje faktoryzację pierwszą, podczas gdy na liczbach ujemnych określa, czy dodatnia wartość liczby jest liczbą pierwszą.
To mniej więcej przekłada się na:
źródło
_+
z-
i+
z-
o -1 bajt.MATL , 21 bajtów
Wypróbuj online!
Dane wyjściowe są pierwszymi n członami sekwencji.
Wyjaśnienie:
Konstruuje listę liczb pierwszych (z początkowym 0), a na końcu znajduje zwraca różnice między kolejnymi liczbami pierwszymi na liście.
źródło
Haskell , 67 bajtów
Wypróbuj online!
(1#1)2 2
to funkcje, które nie pobierają żadnych danych wejściowych i generują nieskończoną listę.stara odpowiedź:
Haskell ,
88837876 bajtówTest pierwszeństwa pochodzi z tej odpowiedzi i został ulepszony przez Christian Sievers (-2 bajty).
-5 bajtów dzięki WW .
Wypróbuj online!
źródło
^2
. To zmieni predykat z testowania na główny na testowanie na pierwsze lub 4 , co nie ma znaczenia w tej aplikacji.05AB1E (starsza wersja) , 12 bajtów
Wypróbuj online!
Wyjaśnienie
Istnieje kilka różnych 12-bajtowych rozwiązań.
Ten konkretny mógłby mieć 10 bajtów, gdybyśmy zainicjalizowali użyteczną zmienną jako 0 (zamiast 1 i 2).
źródło
Python 2 , 119 bajtów
Wypróbuj online!
Następna funkcja Prime f () zaczerpnięta z tej odpowiedzi .
Funkcja g () przyjmuje nieujemną liczbę całkowitą i i zwraca listę wszystkich elementów w sekwencji do tego indeksu.
źródło
Python 2 ,
9998 bajtówWypróbuj online!
1 bajt dzięki dla pana Xcodera .
źródło
k=s-~v
.Haskell ,
101 9997 bajtówFunkcja
l
nie przyjmuje argumentów i zwraca nieskończoną listę. Nie tak krótkie, jak bardziej bezpośrednie podejście @ovs (i oczywiście ukradłem niektóre części z ich odpowiedzi), ale może nadal gra w golfa?Dzięki @ H.PWiz za -2 bajty!
Wypróbuj online!
źródło
Python 2 ,
8280 bajtówWypróbuj online!
Daje to n-ty numer sekwencji (w oparciu o 0). Przesuwając
print
pętlę, można to zmodyfikować, aby wyświetlać pierwszen
elementy w tym samym bajcie: Wypróbuj online!źródło
C (gcc) ,
10099 bajtówWypróbuj online!
źródło
Japt, 17 bajtów
Wysyła
n
termin th, indeksowany 0.Spróbuj
źródło