Liczba całkowita jest liczbą pierwszą wtedy i tylko wtedy, gdy jest dodatnia i ma dokładnie 2 różne dzielniki: 1 i siebie. Podwójna liczba pierwsza składa się z dwóch elementów: p
i p±2
oba są pierwszymi.
Jako dane wejściowe otrzymasz dodatnią liczbę całkowitą. Twoim zadaniem jest zwrócenie wartości prawda / fałsz w zależności od tego, czy dana liczba całkowita należy do pary podwójnej, zgodnie ze standardowym problemem decyzyjnym regułami (wartości muszą być spójne).
Przypadki testowe
Prawda (Twin Primes):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Falsy (nie Twin Primes):
2, 15, 20, 23, 37, 47, 97, 120, 566
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
code-golf
number
decision-problem
primes
Taylor Scott
źródło
źródło
Odpowiedzi:
Brachylog ,
98 bajtówWypróbuj online!
Wyjaśnienie
źródło
√
użycie! +1Galaretka ,
109 bajtówWypróbuj online!
tło
Z wyjątkiem (3, 5) wszystkie podwójne pary pierwsze mają postać (6k - 1, 6k + 1) .
Ponieważ (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 i
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6K - 1 , ponieważ wejście n> 3 , jest wystarczająca, aby sprawdzić, czy n i n + n% 6 - 3 są liczbą pierwszą.
Wzór ten stanie się pracę dla n = 3 , a także, jak 3 + 3% 6 - 3 = 3 jest pierwsza i 3 jest głównym pojedyncze.
Jak to działa
źródło
Python 3 , 53 bajty
Wypróbuj online!
tło
Wszystkie liczby całkowite przyjmują jedną z następujących postaci, z liczbą całkowitą k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Od 6k - 2 , 6k i 6k + 2 są parzyste, a ponieważ 6k - 3 można podzielić przez 3 , wszystkie liczby pierwsze oprócz 2 i 3 muszą mieć postać 6k - 1 lub 6k + 1 . Ponieważ różnica pary podwójnej liczby pierwszej wynosi 2 , z wyjątkiem (3, 5) , wszystkie pary liczb pierwszych mają postać (6k - 1, 6k + 1) .
Niech n będzie mieć postać 6k ± 1 .
Jeśli n = 6k -1 , to n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Jeśli n = 6k + 1 , to n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Zatem jeśli n jest częścią podwójnej pary pierwszej, a n ≠ 3 , to jego bliźniak będzie wynosił n + n% 6-3 .
Jak to działa
Python nie ma wbudowanego testu pierwszeństwa. Chociaż istnieją krótkie sposoby na sprawdzenie pojedynczej liczby pod kątem pierwszeństwa, zrobienie tego dla dwóch liczb byłoby długotrwałe. Zamiast tego będziemy pracować z dzielnikami.
zlicza liczbę całkowitą k w interwale [2, 4n) dzieli (n + n% 6 - 3) n równomiernie, tzn. zlicza liczbę dzielników (n + n% 6 - 3) n w przedziale [2 , 4n) . Twierdzimy, że liczba ta wynosi 2 wtedy i tylko wtedy, gdy n jest częścią podwójnej pary pierwszej.
Jeśli n = 3 (liczba podwójna), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 ma dwa dzielniki ( 3 i 9 ) w [2, 12) .
Jeśli n> 3 jest podwójną liczbą pierwszą, jak widać wcześniej, m: = n + n% 6 - 3 jest jej bliźniakiem. W tym przypadku mn ma dokładnie cztery dzielniki: 1, m, n, mn .
Od n> 3 mamy m> 4 , więc 4n <mn i dokładnie dwa dzielniki ( m i n ) mieszczą się w przedziale [2, 4n) .
Jeśli n = 1 , to (n + n% 6 - 3) n = 1 + 1 - 3 = -1 nie ma dzielników w [2, 4) .
Jeśli n = 2 , to (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 ma jeden dzielnik (sam) w [2, 8) .
Jeśli n = 4 , to (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 ma cztery dzielniki ( 2 , 4 , 5 i 10 ) w [2, 16) .
Jeżeli n> 4 jest parzyste, 2 , n / 2 , a n wszystkie dzielą n, a zatem (n + n% 6-3) n . Mamy n / 2> 2 od n> 4 , więc są co najmniej trzy dzielniki w [2, 4n) .
Jeśli n = 9 , to (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 ma trzy dzielniki ( 3 , 9 i 21 ) w [2, 36) .
Jeśli n> 9 jest wielokrotnością 3 , to 3 , n / 3 , a n wszystkie dzielą n, a zatem (n + n% 6-3) n . Mamy n / 3> 3 od n> 9 , więc są co najmniej trzy dzielniki w [2, 4n) .
Wreszcie, jeśli n = 6k ± 1> 4 nie jest liczbą podwójną, n lub m: = n + n% 6-3 musi być złożone i dlatego należy przyjąć odpowiedni dzielnik d> 1 .
Ponieważ albo n = m + 2 lub m = n + 2 i n, m> 4 , liczby całkowite d , m i n są odrębnymi dzielnikami mn . Ponadto, m <n + 3 <4n od n> 1 , więc mn ma co najmniej trzy dzielniki w [2, 4n) .
źródło
05AB1E ,
109 bajtówZaoszczędzono 1 bajt dzięki Datboi
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
ÌIÍ‚
zamiast40SÍ+
-1 bajtuPHP, 52 bajty
bez GMP, 84 bajtów
(przy użyciu mojej funkcji podstawowej z przepełnienia stosu )
Uruchom jako potok z
-nF
. Puste wyjście dla falsy,1
dla prawdy.Świetne rozwiązanie Dennisa przeniesione do PHP, 56 bajtów
Uruchom jako potok z
-nR
lub spróbuj online .źródło
Mathematica, 33 bajty
Wypróbuj online!
źródło
MATL , 11 bajtów
Dane wyjściowe to
0
lub1
.Wypróbuj online!
Wyjaśnienie
źródło
Pyth ,
14 1211 bajtówPakiet testowy.
Zapisano 3 bajty, korzystając ze wzoru w odpowiedzi @Dennis. Zapisano 1 bajt dzięki @Dennis.
Pyth , 14 bajtów * Wstępne rozwiązanie
Pakiet testowy.
źródło
Siatkówka ,
4544 bajtówZwraca 1, jeśli wejście jest podwójną liczbą pierwszą, w przeciwnym razie 0
Wypróbuj online!
Wyjaśnienie
Konwertuj na Unary
Umieść n-2, n oraz n + 2 na swoich liniach
(Końcowy znak nowej linii) Usuń wszystkie kompozyty większe niż 1
Sprawdź, czy są dwie kolejne liczby pierwsze (lub 1,3, ponieważ 3 jest liczbą pierwszą)
źródło
Perl 6 , 24 bajtów
Wypróbuj online!
*
jest argumentem tej anonimowej funkcji.0 & (-2 | 2)
to skrzyżowanie składające się z liczb0
ORAZ albo z-2
LUB2
. Dodanie*
do tego skrzyżowania powoduje połączenie numeru*
ORAZ jednej z liczb* - 2
LUB* + 2
. Wywołanieis-prime
metody na tym skrzyżowaniu zwraca prawdziwą wartość, jeśli*
jest liczbą pierwszą ORAZ albo* - 2
OR* + 2
jest liczbą pierwszą. Wreszcie,?
zawraca prawdziwe połączenie do wartości boolowskiej, spełniając warunek konsekwentnego zwracania wartości.źródło
JavaScript,
91 bajtów, 81 bajtów dzięki Jaredowi SmithowiWyjaśnienie
p
informuje, czy podana liczban
jest liczbą pierwszą, czy nie, at
testy podaje liczbęn
in±2
.Przykład
Pokaż fragment kodu
źródło
var
nawiasów wokółn
definicji funkcji itp.n
obok wartościt(n)
zwiększonej przejrzystości (np.7: true
)J, 23 bajty
Wypróbuj online!
w jaki sposób?
źródło
3>0#.@p:0 2 _2&+
05AB1E , 8 bajtów
Port galaretki Port Dennisa
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Rubinowy, 38 + 6 = 44 bajty
Wymaga opcji
-rprime
.Wypróbuj online!
źródło
&
zamiast&&
JavaScript (ES6), 54 bajty
Pokaż fragment kodu
źródło
Excel VBA,
102100 bajtówBrak wbudowanych funkcji pierwszeństwa dla VBA :(
Kod
Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane z komórki
[A1]
i wysyła1
(prawda) lub0
(fałsz) do okna natychmiastowego VBEFunkcja pomocnika
Alternatywnie, 122 bajty
Kod
Rozwiązanie oparte na funkcji sprawdzania pierwotności rekurencyjnej
Funkcja pomocnika
źródło
PHP, 85 bajtów 24 bajty dzięki Mayube
źródło
a
Ib
)function
już tego słowa kluczowego?Python 2 , 75 bajtów
Wypróbuj online!
źródło
Japt , 13 bajtów
Zwraca
true
ifalse
określa, czy liczba jest częścią pierwszej pary bliźniaczej.Wypróbuj online!
Wyjaśnienie
Implicit:
U
= liczba całkowita wejściowaSprawdź, czy dane wejściowe to prime (
j
), AND (©
) ...Korzystając z tablicy
[U+2, U-2]
, sprawdź, czy jakieś elementy są prawdziwe (d
) zgodnie z funkcją pierwotności (j
).Wynik niejawny wyniku boolowskiego z
is input prime AND is any ±2 neighbor prime
.źródło
[U+2U-2]
może być znacznie krótszy, ale nie wiem, jak ...