Powszechnie wiadomo, że nieparzyste liczby pierwsze pojawią się w trójkącie Pascala dokładnie dwa razy. Jednak nie wszystkie liczby, które pojawiają się dokładnie dwa razy w trójkącie Pascala, są liczbą pierwszą. Nazwiemy te liczby liczbą pierwszą Pascala.
Liczby pierwsze Pascala to liczby złożone, które pojawiają się dokładnie dwa razy w trójkącie Pascala. Pierwsze kilka liczb pierwszych Pascala to
4, 8, 9, 12, 14, 16, 18, ...
Wyzwanie polega na przyjęciu dodatniej liczby całkowitej n jako wartości wejściowej i wyjściowej true lub false, w zależności od tego, czy n jest liczbą pierwszą Pascala, czy nie. To jest golf golfowy, więc wygrywa najkrótszy program!
Odpowiedzi:
Wolfram Language (Mathematica) , 45 bajtów
Wypróbuj online!
Każda liczba złożona n pojawia się dokładnie dwa razy w rzędzie n i nie może pojawić się później. Zatem warunkiem dla liczb pierwszych Pascala jest to, że w ogóle nie pojawiają się one w pierwszych rzędach n-1 .
O ile wiem, jest to krótsze niż sprawdzenie, czy pojawia się dokładnie dwa razy w pierwszych n wierszach i możliwość użycia
!PrimeQ
zamiast tego.źródło
Python 2 , 93 bajty
Wypróbuj online!
Jest to nazwana funkcja f , która wyprowadza kod zakończenia , 0 dla Pascal Primes, 1 w przeciwnym razie.
Jak to działa
To w zasadzie sprawdza, czy n występuje w pierwszych n - 1 rzędach trójkąta Pascala, czy jest liczbą pierwszą, i generuje błąd, jeśli spełniony jest którykolwiek z tych dwóch warunków.
Zaoszczędzono 1 bajt dzięki ovs .
źródło
Galaretka ,
11109 bajtówDzięki:
’
(+1) unikaj używanian2
(-2), więc -1 ogólnie.Wypróbuj online!
Alternatywne podejście , Jonathan Allan . (wadliwy)
Objaśnienie ostatniego wiersza:
n
pojawia się dwa razy w trójkącie Pascala” jest równoważne z „n
nie pojawia się w pierwszychn-1
rzędach”.true
jeśli liczba nie jest liczbą pierwszą (to znaczyÆP == 0
), a liczbac
wynosi zero. Z tego możemy wywnioskowaćÆP == c
.Można udowodnić, że jeśli są równe, to są równe 0, ponieważ:
ÆP
zwraca wartość logiczną, która może wynosić tylko 0 lub 1.n
jest liczbą pierwszą, dlatego nie może pojawić się w pierwszychn-1
wierszach (to znaczy,c == 0
)źródło
1
nie jest liczbą pierwszą Pascala; to mówi, że tak.Ḷc€ḶFċoÆP¬
myślę, że działałobyċ=ÆP
powinno działać.Ḷcþ`Fċ=ÆP
powinno działać.Haskell ,
8684 bajtówWypróbuj online!
Wyjaśnienie
Funkcja
p
rekurencyjnie definiuje zdegenerowany trójkąt Pascala:Jak widzimy (w tym rozwiązaniu
1
jest nieco wyjątkowy) każda liczban
pojawia się dokładnie dwa razy w tymn+1
rzędzie, a wszystkie elementy kolejnych rzędów tylko się powiększają, dlatego musimy tylko sprawdzić, czyn
jest gdzieś w górę don
tego rzędu, aby zobaczyć, czy element jest zdyskwalifikowany:Teraz mamy
True
dla wszystkich elementów, które pojawiają się ponad dwukrotnie (z wyjątkiem1
), więc wszystko, czego potrzeba, aby mieć uszkodzonąisPrime
funkcję, która powracaTrue
do1
:źródło
APL (Dyalog) ,
44342419 bajtów5 bajtów zapisanych dzięki @Cowsquack
Wypróbuj online!
W jaki sposób?
Dbamy o to, aby nie
⍳
- zasięg0
..n-1
,⍳∘.!
- na dwumian kartezjański z jaźnią⊢∊
- zawierająn
,⍱
- ani nie⊢|⍨
-n
modulo każdej pozycji2↓⍳
- zasięg2
..n-1
~0∊
- nie zawiera0
(inaczej niepodzielny)źródło
(∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)
jest krótsze o dwa bajty(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳
dla dwóch kolejnych zmieniłem algorytm sprawdzania pierwotności~
daje(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳
jeden bajt mniej.JavaScript (Node.js) ,
103101 bajtówWypróbuj online!
źródło
n=>(r=x=>[...Array(n).keys(F=n=>n>0?n*F(n-1):1)].every(x))(i=>r(j=>F(i)/F(j)/F(i-j)-n))>F(n-1)**2%n
trereity działa, ale tak naprawdę dla małego zasięguRuby ,
9795 bajtówWypróbuj online!
Zeskrobałem kilka bajtów.
źródło
R , 55 bajtów
Wypróbuj online!
sum(!n%%1:n)>2
jest testem złożonym iouter(1:n-1,1:n,choose)
oblicza wiersze0
don-1
trójkąta Pascala, więc upewniamyn
się, że tam się nie pojawia.źródło
05AB1E , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Kontrole, które
n
występują dokładnie dwa razy w pierwszych n + 1 rzędach trójkąta paskali i nie są liczbą pierwszą.Porównanie działa, ponieważ w trójkącie nie ma liczb pierwszych, które mogą wystąpić 3 razy.
źródło
Haskell , 90 bajtów
Wypróbuj online!
źródło
Pyth , 10 bajtów
Wypróbuj online! lub sprawdź pakiet testowy.
źródło
JavaScript (Node.js) ,
79133130128 bajtówWypróbuj online!
zła sprawdzanie liczb pierwszych +50 bajtów :(
źródło
Python 2 ,
105104 bajtówdzięki user202729 za -1 bajt
Wypróbuj online!
źródło
p+r
wydaje się zbędna ...