Biorąc pod uwagę dodatnią liczbę całkowitą n , oblicz n- tą liczbę Wilsona W (n) gdzie
oraz e = 1, jeśli n ma prymitywny moduł główny n , w przeciwnym razie e = -1. Innymi słowy, n ma pierwotny pierwiastek, jeśli nie istnieje liczba całkowita x, gdzie 1 < x < n-1 i x 2 = 1 mod n .
- To jest kod-golf więc tworzyć najkrótszy kod funkcji lub programu, który oblicza n th liczby Wilson liczbę całkowitą wejściowego n > 0.
- Możesz użyć indeksowania 1 lub 0. Możesz także wybrać, aby wypisać pierwsze n liczb Wilsona.
- Jest to sekwencja OEIS A157249 .
Przypadki testowe
n W(n)
1 2
2 1
3 1
4 1
5 5
6 1
7 103
8 13
9 249
10 19
11 329891
12 32
13 36846277
14 1379
15 59793
16 126689
17 1230752346353
18 4727
19 336967037143579
20 436486
21 2252263619
22 56815333
23 48869596859895986087
24 1549256
25 1654529071288638505
k = 1
ie = -1
wynik produktu byłby0
. (przepraszam,Odpowiedzi:
Galaretka ,
87 bajtów1 bajt dzięki Dennisowi.
Wypróbuj online!
Tak naprawdę nie musisz obliczać,
e
ponieważ i tak musisz dzielić.źródło
gRỊT
zapisuje bajt.gRỊT
szczegółów dotyczących galaretki ...Łuska , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 91 bajtów
źródło
Pyth , 11 bajtów
Wypróbuj tutaj!
W jaki sposób?
/h*Ff>2iTQS
- Pełny program.S
- Wygeneruj obejmujący zakres [1, wejście]f
- Filtruj:iTQ
- którego GCD z wejściem.>2
- jest mniejsza niż dwa (może być zastąpiony przez jedną z następujących czynności:q1
,!t
)*F
- Zastosuj mnożenie wielokrotnie. Innymi słowy, produkt z listy.h
- Zwiększ produkt o 1./
- Podział podłogi z wejściem.TL; DR : Pobierz wszystkie koprimy do wejścia w zakresie [1, wejście] , pobierz ich produkt, zwiększ go i podziel przez wejście.
źródło
Python 2 , 62 bajty
Wypróbuj online!
źródło
J, 33 bajty
Ten jest raczej prośbą o poprawę niż cokolwiek innego. Najpierw wypróbowałem milczące rozwiązanie, ale było dłużej.
wyjaśnienie
Jest to dość proste tłumaczenie rozwiązania pana Xcodera na J.
Wypróbuj online!
źródło
05AB1E , 8 bajtów
Wypróbuj online!
źródło
R , 82 bajty
Używa podziału na liczby całkowite, a nie wymyśla,
e
jak wiele odpowiedzi tutaj, chociaż wymyśliłem to, we=2*any((1:n)^2%%n==1%%n)-1
tym przypadek skrajny,n=1
który moim zdaniem był całkiem fajny.Uses rturnbull's vectorized GCD function.
Try it online!
źródło
Pari/GP, 36 bytes
Try it online!
źródło
JavaScript (ES6),
727068 bytesInteger division strikes again. Edit: Saved 2 bytes thanks to @Shaggy. Saved a further 2 bytes by making it much more recursive, so it may fail for smaller values than it used to.
źródło
f=(n,i=n,p=1,g=(a,b)=>b?g(b,a%b):a)=>--i?f(n,i,g(n,i)-1?p:p*i):-~p/n|0
(n,x=n)=>(g=s=>--x?g(s*(h=(y,z)=>z?h(z,y%z):--y?1:x)(n,x)):++s)(1)/n|0
Haskell , 42 bajty
Wypróbuj online!
Używa sztuczki dzielenia liczb całkowitych jak wszystkich innych odpowiedzi.
Wykorzystuje wskaźniki oparte na 1.
Wyjaśnienie
źródło
Japt , 11 bajtów
Spróbuj
Wyjaśnienie
Domniemane wprowadzenie liczby całkowitej
U
.Wygeneruj tablicę liczb całkowitych od 1 do
U
.Współczynniki filtru (
f
) dlaU
.Zmniejsz przez pomnożenie.
Dodaj 1.
Podziel przez
U
, potwierdź wynik i domyślnie uzyskaj wynik.źródło
Aksjomat, 121 bajtów
dodaj jakiś typ, odłóż to i wynik
źródło
JavaScript (ES6),
838180787668 bajtówMój pierwszy przebieg był o kilka bajtów dłuższy niż rozwiązanie Neila, dlatego pierwotnie porzuciłem to na rzecz rozwiązania redukcji macierzy poniżej. Od tego czasu grałem w golfa, żeby związać się z Neilem.
Spróbuj
Brak rekurencji, 76 bajtów
Chciałem dać nierekurencyjne rozwiązanie, aby zobaczyć, jak to się potoczy - nie tak źle, jak się spodziewałem.
Spróbuj
źródło