Sekwencja
Wszyscy wiedzą, że jedyną parzystą liczbą pierwszą jest 2
. Ho-hum. Ale są pewne liczby parzyste n
, które po połączeniu z n-1
nimi stają się liczbą pierwszą.
Po pierwsze, 1
nie ma go na liście, ponieważ 10
nie jest liczbą pierwszą. Podobnie z 2
( 21
) i 3
( 32
). 4
Działa jednak, ponieważ 43
jest liczbą pierwszą, więc jest to pierwsza liczba w sekwencji a(1) = 4
. Następną liczbą, która działa (ani 6
( 65
), ani 8
( 87
) działa) jest 10
, ponieważ 109
jest liczbą pierwszą, więc a(2) = 10
. Potem pomijamy jeszcze kilka, dopóki 22
, bo 2221
jest pierwsza, więc a(3) = 22
. I tak dalej.
Oczywiście wszystkie terminy w tej sekwencji są parzyste, ponieważ każda nieparzysta liczba n
po połączeniu z nią n-1
staje się parzysta (jak 3
zamienia się 32
), co nigdy nie będzie liczbą pierwszą.
Jest to sekwencja A054211 w OEIS.
Wyzwanie
Podany numer wejściowy, n
który pasuje gdzieś do tej sekwencji (tj. Jest n
połączony zn-1
liczbą pierwszą), wypisz swoją pozycję w tej sekwencji. Możesz wybrać indeksowanie 0 lub 1, ale proszę podać, które z nich w zgłoszeniu.
Zasady
- Można założyć, że dane wejściowe i wyjściowe pasują do natywnego typu liczb całkowitych twojego języka.
- Dane wejściowe i wyjściowe można podawać w dowolnym dogodnym formacie .
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- 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).
Przykłady
Poniższe przykłady są indeksowane 1.
n = 4
1
n = 100
11
n = 420
51
źródło
n
jest zawsze jedyną liczbą pierwszą podzielną przezn
. To nie jest wyjątkowe - tak właśnie działają liczby pierwsze.Odpowiedzi:
Galaretka ,
87 bajtówŁącze monadyczne przyjmujące element sekwencji i zwracające jego indeks w sekwencji.
Wypróbuj online!
W jaki sposób?
źródło
zip(head(), pop())
sztuczka jest naprawdę fajna. :)Haskell ,
807570 bajtów5 bajtów oszczędności dzięki Laikoni
Wypróbuj online!
źródło
p x=all((>0).mod x)[2..x-1]
który kończy się niepowodzeniem dla 1, ale w tym przypadku nie powinno to mieć znaczenia.show x++show(x-1)
może być skrócony doshow=<<[x,x-1]
.show
można to zrobić krótszą metodą, ale z jakiegoś powodu nie wymyśliłem mapy konkat.Galaretka ,
12, 10, 8 bajtówWypróbuj online!
1-2 bajty zapisane dzięki @ nmjmcman101, a 2 bajty zapisane dzięki @Dennis!
Wyjaśnienie:
źródło
05AB1E ,
987 bajtówKod
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie
źródło
'0-1'
jest liczbą pierwszą.Łuska ,
131110 bajtów1
-indexed rozwiązanie:Wypróbuj online!
Niegolfowane / Wyjaśnienie
Dzięki @Zgarb za
-3
bajty!źródło
£İp
jest równoważne zṗ
. Możesz także zapisać bajt za pomocą#…ḣ
zamiast£f…N
.Python 2 , 87 bajtów
-2 bajty dzięki @officialaimm . 1-indeksowany.
Pakiet testowy.
źródło
Pyth , 12 bajtów
Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe.
W jaki sposób?
źródło
Japt ,
1514121198 bajtów1-indeksowany.
Spróbuj
źródło
Æ
iÇ
?! Dzięki, @Oliver; Zaktualizuję się, kiedy wrócę do komputera.2o+X
(z końcową spacją) działałoby zamiast[XXÉ]
, ale jeśli kiedykolwiek przejdę do[]
nawiasów automatycznego równoważenia, twoje rozwiązanie będzie o bajt krótsze. (Właściwie 2, bo wtedy możesz to zrobićõ_ZÉ]¬nÃèj
)[]
! : DRöda , 73 bajty
Wypróbuj online!
1-indeksowany. Wykorzystuje strumień do wprowadzania i wyprowadzania danych.
Wyjaśnienie:
źródło
Pyth , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
lfTmP_s+`d`tdS
, niefortunnie, że nie znalazłem twojej sztuczki w tym czasie samPerl 6 , 45 bajtów
Wypróbuj online!
grep
Produkuje sekwencję kwalifikacyjna numerów, a następnie szukamy klucza (:k
) (tj Index) zfirst
numeru na liście, która wynosi parametr wejściowy$_
.źródło
C
99bajtów1 indeksowany. Boli mnie pisanie testów pierwotności, które są tak marnotrawstwem obliczeniowym, ale bajty to w końcu bajty.
Jeśli pozwolimy na kilka naprawdę kruchych rzeczy, kompilowanie na moim komputerze bez optymalizacji z GCC 7.1.1 działa następujące 94 bajty (dzięki @Conor O'Brien )
w przeciwnym razie te znacznie bardziej niezawodne 99 bajtów wykona zadanie
Pełny program, nieco bardziej czytelny:
źródło
n=c;
zamiastreturn c;
:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
JavaScript (ES6),
49 4847 bajtów1-indeksowany. Ograniczone wielkością stosu wywołań twojego silnika.
Wypróbuj online!
źródło
Mathematica, 77 bajtów
źródło
QBIC , 25 bajtów
Wyjaśnienie
Wykorzystuje to dość zaangażowaną matematykę z rzuciem odlewanym na sznurek dla dobrej miary. Tworzenie wersji kapelusza polega wyłącznie na łączeniu łańcuchowym o jeden bajt dłużej:
źródło
PHP , 203 bajty
Wypróbuj online!
Wykorzystuje indeks wyjściowy 1. Łącze TIO ma czytelną wersję kodu.
źródło
Rubin , 42 + 9 = 51 bajtów
Wykorzystuje
-rprime -n
flag. 1-indeksowany.Działa poprzez zliczanie wszystkich liczb równych lub poniżej danych wejściowych, które spełniają warunek (lub bardziej technicznie, wszystkie liczby, które spełniają
n-1
warunek). Ponieważ wejście jest gwarantowane w sekwencji, nie ma ryzyka błędu z przypadkowego wejścia takiego jak to,7
że „nie stanie się liczbą pierwszą”.Wypróbuj online!
źródło
Rubin , 62 bajty
Wypróbuj online!
1-indeksowany
źródło
Python 2 , 85 bajtów
1-indeksowany
Test
Poprawa na pana Xcoder za odpowiedź
źródło
Java 8, 108 bajtów
0-indeksowane
Wyjaśnienie:
Wypróbuj online.
źródło
Stax , 10 bajtów
1- Zindeksowane
Uruchom i debuguj. Objaśnienie
źródło
Tidy , 33 bajty
Wypróbuj online!
Wyjaśnienie
Podstawową ideą jest utworzenie sekwencji prawidłowych liczb, a następnie zwrócenie funkcji indeksu curry.
źródło