Jedna z moich ulubionych definicji liczb pierwszych jest następująca:
2 jest najmniejszą liczbą pierwszą.
Liczby większe niż 2 są liczbą pierwszą, jeśli nie można ich podzielić przez mniejszą liczbę pierwszą.
Jednak ta definicja wydaje się dowolna, dlaczego 2? Dlaczego nie jakiś inny numer? Cóż, spróbujmy jeszcze kilka liczb, które zdefiniują n-prime, takie jak
n jest najmniejszą n-liczbą pierwszą.
Liczby większe niż n są liczbą n-pierwszą, jeśli nie można ich podzielić przez mniejszą liczbę n-pierwszą.
Zadanie
Zadanie polega na napisaniu programu, który przyjmuje dwa wejścia, dodatnią liczbę całkowitą n i dodatnią liczbę całkowitą a . Następnie zdecyduje, czy a jest n- prime. Twój program powinien wypisać dwie różne wartości: jedną dla „tak, to n-pierwsza”, a drugą dla „nie, to nie n-pierwsza”.
To jest pytanie w golfa kodu, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Testy
Oto listy pierwszych 31 liczb pierwszych dla n = 2 do n = 12 (1 to jedyna liczba pierwsza)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
źródło
n=6, a=15
to pierwszy interesujący przypadek testowy.Odpowiedzi:
Haskell , 45 bajtów
Wypróbuj online!
Definiuję miłą funkcję rekurencyjną
(!)
:n!a
sprawdza, czy którykolwiek z czynnikówa
w zakresie[n,a-1]
jest ann-prime
. Następnie neguje wynik. Zapewnia to równieżn>a
źródło
Python 2 ,
3937 bajtówDzięki Halvard Hummel za -2 bajty.
Wypróbuj online!
źródło
Python 3 , 45 bajtów
Wypróbuj online!
Jak to działa
To przyjmuje dwie liczby całkowite jako dane wejściowe, i i k . Najpierw sprawdza, czy k ≥ i . Następnie generuje zakres [i, k) i dla każdej liczby całkowitej N w tym zakresie sprawdza, czy N jest coprime do k . Jeżeli spełnione są oba warunki, to k to ja -prime.
źródło
&
zamiastand
i>=i
zamiast>i-1
?>=i
ma nadal 4 bajty (ze względu na miejsce).&
, nie potrzebujesz miejsca.Łuska ,
65 bajtówWypróbuj online! lub zobacz wyniki do 80 .
Dzięki Leo za -1 bajt.
Wyjaśnienie
źródło
R ,
4437 bajtówWypróbuj online!
-7 bajtów dzięki Giuseppe
Zwraca
TRUE
jeślia
jest równen
lub (a==n|
)a
jest większa niżn
i (a>n&
) dla każdej liczby k odn
doa-1
,a
nie jest równomiernie podzielna przez k (all(a%%n:(a-1))
)Zwraca
FALSE
inaczejźródło
J, 30 bajtów
Wypróbuj online!
Pobiera wartość początkową jako prawy argument i wartość do sprawdzenia przy lewym argumencie.
Zrozumiałem pierwotnie i nie uwzględniłem mniejszych argumentów niż liczba początkowa. Jestem trochę niezadowolony z długości mojego rozwiązania.
Wyjaśnienie
Niech
x
będzie lewym argumentem (wartością do sprawdzenia) iy
prawym argumentem (liczba początkowa).Notatki
Element w pozycji
x-y
jest wynikiem testu pierwotności dlax
(ponieważ dodaliśmyy
do pierwotnego zakresu).Pomnożenie przez
x >: y
gwarantuje, że otrzymamy wartość falsey (0
) zax
mniej niży
.źródło
JavaScript (ES6),
333230 bajtówPobiera dane wejściowe w składni curry
(n)(a)
. Zwraca wartość logiczną.Próbny
Pokaż fragment kodu
źródło
Haskell , 30 bajtów
2 bajty zaoszczędzone dzięki pomysłowi H.PWiz, który został zapożyczony z odpowiedzi flawr
Wypróbuj online!
Ok, odkąd minęło trochę czasu, a jedyna jak dotąd odpowiedź Haskell to 45 bajtów, postanowiłem opublikować własną odpowiedź.
Wyjaśnienie
Ta funkcja sprawdza, czy jedyną liczbą między n a a , przez którą można podzielić a, jest sama.
Teraz w definicji wspomniano tylko n- primes mniejsze niż a , więc dlaczego sprawdzamy te wszystkie dodatkowe liczby? Czy nie będziemy mieć problemów, gdy a jest podzielne przez jakiś n- kompozyt większy niż n ?
Nie zrobimy tego, ponieważ jeśli n- kompozyt jest większy niż n, to z definicji musi być podzielny przez mniejszą n- pierwszą. Tak więc, jeśli dzieli tak musi mniejszy n -prime.
Jeśli a jest mniejsze niż n
[n..a]
,[]
nie może być równe,[1]
co powoduje niepowodzenie sprawdzania.źródło
Galaretka , 8 bajtów
Wypróbuj online!
źródło
Pip ,
231914 bajtówNajkrótszą metodą jest port odpowiedzi Pythona pana Xcodera . Pobiera najmniejszą liczbę pierwszą i liczbę do przetestowania jako argumenty wiersza poleceń. Wypróbuj online!
źródło
C, 55 bajtów
Wypróbuj online!
53 bajty, jeśli dozwolonych jest wiele prawdziwych wartości zwracanych:
Wypróbuj online!
źródło
dc ,
403437 bajtówDołączyłbym link TIO, ale wydaje się, że TIO ma błędną dystrybucję,
dc
widząc, jak to działa zgodnie z przeznaczeniem w moim systemie, aleQ
polecenie działa niepoprawnie na TIO. Zamiast tego znajduje się link dobash
poligonu testowego z poprawnie działającą wersjądc
:Demo It!
źródło
APL (Dyalog) , 24 bajty
Wypróbuj online!
W jaki sposób?
⍳⍵
-1
doa
o←⍺↓
-n
doa
, zapisz doo
o|⍨⊂o
- modulo każdy elemento
z każdym elementem wo
0=
- sprawdź, gdzie to się równa0
(dzieli)+/¨
- zsumuj liczbę działów1=
- jeśli mamy tylko jeden, to liczba jest dzielona tylko przez siebieo/⍨
- więc zachowujemy te zdarzenia⍵∊
- jesta
w tej tablicy resztkowej?źródło
JavaScript (Node.js) , 27 bajtów
Wypróbuj online!
Port mojej odpowiedzi w Pythonie, pobiera dane wejściowe w składni curry:
m(number)(first prime)
źródło
JavaScript ES5, 34 bajty
źródło
Dodaj ++ , 20 bajtów
Wypróbuj online!
źródło