Pierwsza szczelina jest różnica pomiędzy kolejnymi liczbami pierwszymi. Mówiąc dokładniej, jeśli p i q są liczbami pierwszymi z p < q i p +1, p +2, ..., q −1 nie są liczbami pierwszymi, liczby pierwsze p i q określają lukę n = q - p . Mówi się, że szczelina zaczyna się od p i ma długość n .
Wiadomo, że istnieją arbitralnie duże luki główne. To znaczy, biorąc pod uwagę n , istnieje pierwsza przerwa o długości n lub większa. Jednak pierwsza szczelina długości dokładnie n może nie istnieć (ale większa będzie).
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą n
, wypisz pierwszą liczbę pierwszą, która rozpoczyna przerwę o długości n
lub większej.
Jako przykład 4
należy podać dane wyjściowe 7
, ponieważ 7 i 11 to pierwsze kolejne liczby pierwsze, które różnią się co najmniej o 4 (poprzednie przerwy to 1, od 2 do 3; 2, od 3 do 5; i 2, od 5 do 7). W przypadku danych wejściowych 3
odpowiedź powinna również brzmieć 7
(nie ma przerw o długości 3).
Zasady dodatkowe
Algorytm powinien teoretycznie działać na dowolnie wysoki
n
. W praktyce dopuszczalne jest, jeśli program jest ograniczony czasem, pamięcią lub wielkością typu danych.Dane wejściowe i wyjściowe można przyjmować dowolnymi rozsądnymi środkami .
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Input -> Output
1 2
2 3
3 7
4 7
6 23
10 113
16 523
17 523
18 523
30 1327
50 19609
100 370261
200 20831323
źródło
Odpowiedzi:
Gaia , 6 bajtów
Jest to wyjątkowo nieefektywne (wykonanie
16
testu na mojej maszynie zajęło ponad godzinę).Wypróbuj online!
Wyjaśnienie
Wydaje się, że sekwencja ma właściwość, że a (n) <= 2 ^ n .
źródło
Galaretka ,
10, 9, 810 bajtówWypróbuj online!
Dwa bajty zapisane dzięki @Dennis! (a następnie dodano ponownie z powodu przypadków na krawędziach)
Wyjaśnienie:
źródło
#
odlicza się tutaj od danych wejściowych) Wydaje się rozsądne założenie tego, ale ja nie mam pojęcia, czy jest to prawidłowe założenie. EDYCJA: FYI naprawić (jeśli to konieczne) przedrostek z2ð
Mathematica, 30 bajtów
Wypróbuj online!
Mathematica, 35 bajtów
Wypróbuj online!
Mathematica, 77 bajtów
źródło
p
iq
pierwszy ... Pierwszy kod wydaje się jednak nieprawidłowy, ponieważ zwiększa się tylko do 65535, chyba że podasz jawnie argumentMaxIterations
.(For[t=2,NextPrime@t-t<#,t++];t)&
Haskell ,
106 102 93 77 7372 bajtówGeneruje to najpierw nieskończoną listę liczb pierwszych, a następnie szuka pierwszych luk. Lista pierwsza została zaczerpnięta stąd . Prawdopodobnie można go skrócić, ale jeszcze nie wiem, jak :)
Dzięki @BruceForte za -4 bajty i @Zgrab za -1 bajt!
Wypróbuj online!
źródło
zip=<<tail$[...]
zapisuje bajt.n
czasie przestanie działać po skończonym czasie :) (Haskell nie jest językiem proceduralnym, lecz funkcjonalnym z leniwą oceną.)Pyth - 14 bajtów
Filtruje od [1, inf), filtrując według pierwotności (
P_
) i że następna liczba pierwsza odfiltrowana z (n, inf), ma inną> = na wejściu.Pakiet testowy .
źródło
PowerShell ,
979691 bajtówWypróbuj online!
Pobiera dane wejściowe
$n
, ustawia$a
i$b
równa2
, a następnie wchodzi w nieskończonąfor
pętlę. Wewnątrz zapętlamy się,$b
aż dojdziemy do następnej liczby pierwszej . Następnie sprawdzamy, czy$b-$a
(czyli różnica) jest-g
reaterthanore
qual do$n
. Jeśli tak, wysyłamy$a
iexit
. W przeciwnym razie możemy ustawić$a
się$b
i przyrost$b
i rozpocząć naszą kolejną wyszukiwanie.Ostrzeżenie: Jest to powolne w przypadku dużych danych wejściowych. W rzeczywistości nie może ukończyć
50
testu TIO na wyższym poziomie niż 60 lat. No cóż.źródło
Łuska ,
131110 bajtówWypróbuj online!
źródło
Mathematica, 39 bajtów
Wersja 33-bajtowa (niepoprawna, ponieważ dotyczy tylko pierwszej liczby 65535)
źródło
Python 2 ,
9688 bajtów- 8 bajtów Dzięki @Maltysen
Wypróbuj online!
źródło
Perl 6 , 63 bajtów
Wypróbuj online!
źródło
Mathematica, 37 bajtów
Function
z pierwszym argumentemg
. Począwszy od2
, stosuje funkcjęp=NextPrime
wielokrotnie tak długo, jak długop@#-#<g&
dajeTrue
(przerwa między bieżącą liczbą pierwszą a następną liczbą pierwszą jest mniejsza niżg
).źródło
R + gmp, 55 bajtów
Wykorzystuje funkcję nextprime z biblioteki gmp
źródło
cat(s)
na końcu. Drukowanie niejawne nie działa w pełnych programach.Rubin , 61 bajtów
Wypróbuj online!
źródło
C =
141109 bajtów; C ++, D = 141 bajtów; C #, Java = 143 bajtyOSTRZEŻENIE : ALGORYTM NISKIEJ WYDAJNOŚCI
Ten kod nie był w stanie obliczyć pierwszej przerwy w
g(200)
ciągu 10 minut. Wymagałog(100)
to 10 sekund (wersja C ++)Wersja C ++ i D:
Wersja C # i Java:
Wersja C, -32 bajtów dzięki pułapowi cat:
Różnice między wersją C # / Java i C / C ++ / D:
!p(n)
<==>p(n)==0
źródło
return 0; return 1
i zdjąć!
przedp(++n)
d%i==0
i!(d%i)
może byćd%i<0
. Ponadto, przy użyciu D's system szablonów rozwiązanie w D może być:T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;
. (Usunięcie nawiasów klamrowych pofor
ido
może również dotyczyć C ++)int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}
<- to powinno działać dla wersji C ++D,
127125122 bajtówOSTRZEŻENIE: ALGORYTM NISKIEJ WYDAJNOŚCI !!
Wypróbuj online!
W jaki sposób?
HatsuPointerKun jeszcze raz, ale zrobię magię D.
T p(T)(T d)
i jest krótszy niż C ++r=d%i++<1||r
, Specyficzne dla D shenanigany, mogą działać w C / C ++, ale nie wiem.p(++n)
, tak samo jak powyżej, nie jestem pewien, czy działa w C / C ++while(p(++n)){}
, tutaj widać, dlaczego D jest zły w golfie, nie można użyć go;
jako pustego stwierdzenia.źródło
Perl 6 ,
4137 bajtówWypróbuj online!
Wyjaśnienie
źródło
QBIC , 28 bajtów
Wyjaśnienie
źródło
05AB1E , 9 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe . (Pakiet testowy nie zawiera dwóch ostatnich przypadków testowych, ponieważ dla nich przekroczono limit czasu TIO).
Ponieważ drugie pytanie jest zamknięte jako duplikat tego , zamieszczam tutaj również swoją odpowiedź .
Wyjaśnienie:
źródło
Java 8,
9992 bajtówWypróbuj online. (Największy przypadek testowy jest wykluczony, ponieważ przekracza limit czasu w TIO.)
Wyjaśnienie:
źródło
Tidy , 33 bajty
Wypróbuj online!
Lub 28 znaków / 34 bajty:
{x:({v:⊟v≤-x}↦primes+2)@0@0}
Wyjaśnię to, używając ekwiwalentnego odpowiednika ASCII:
źródło
APL (NARS), 36 znaków, 72 bajty
1π jest funkcją „następna liczba pierwsza”; test:
źródło