Berechnen Sie bei einer positiven ganzen Zahl n die n- te Wilson-Zahl W (n), wobei
und e = 1, wenn n ein primitives Wurzelmodulo n hat , andernfalls ist e = -1. Mit anderen Worten, n hat eine Primitivwurzel, wenn es keine ganze Zahl x gibt, wobei 1 < x < n-1 und x 2 = 1 mod n .
- Dies ist Code-Golf. Erstellen Sie also den kürzesten Code für eine Funktion oder ein Programm, die bzw. das die n- te Wilson-Zahl für eine Ganzzahl n > 0 berechnet .
- Sie können entweder eine 1-basierte oder eine 0-basierte Indizierung verwenden. Sie können auch die ersten n Wilson-Zahlen ausgeben .
- Dies ist die OEIS-Sequenz A157249 .
Testfälle
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
unde = -1
wäre das Ergebnis des Produkts0
. (Es tut mir leid, dass ich viele Fragen gestellt habe, aber ich brauche Klarstellungen für meine Antwort: p)Antworten:
Gelee ,
87 Bytes1 Byte danke an Dennis.
Probieren Sie es online!
Sie müssen nicht wirklich rechnen,
e
da Sie sowieso teilen müssen.quelle
gRỊT
Speichert ein Byte.gRỊT
Details von Jelly ...Schale , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
Mathematica, 91 Bytes
quelle
Pyth , 11 Bytes
Probieren Sie es hier aus!
Wie?
/h*Ff>2iTQS
- Volles Programm.S
- Inklusivbereich generieren [1, Eingabe]f
- Filter-Keep diejenigen:iTQ
- Wessen GCD mit dem Eingang.>2
- weniger als zwei (kann durch eine der folgenden Fassung:q1
,!t
)*F
- Multiplikation wiederholt anwenden. Mit anderen Worten, das Produkt der Liste.h
- Erhöhen Sie das Produkt um 1./
- Etageneinteilung mit der Eingabe.TL; DR : Holen Sie sich alle Koprime zum Eingang in den Bereich [1, Eingang] , holen Sie sich ihr Produkt, erhöhen Sie es und dividieren Sie es durch den Eingang.
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
quelle
J, 33 Bytes
Dies ist mehr eine Bitte, eine Verbesserung zu sehen als alles andere. Ich habe zuerst eine stillschweigende Lösung ausprobiert, aber sie war länger.
Erläuterung
Dies ist eine ziemlich einfache Übersetzung von Mr. Xcoders Lösung in J.
Probieren Sie es online!
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
quelle
R 82 Bytes
Verwendet eine ganzzahlige Division, anstatt
e
wie viele Antworten hier herauszufinden , obwohl ich das herausgefunden habee=2*any((1:n)^2%%n==1%%n)-1
einschließlich des Randfalls, vonn=1
dem ich dachte, dass er ziemlich ordentlich war.Verwendet die vektorisierte GCD-Funktion von rturnbull .
Probieren Sie es online!
quelle
Pari / GP , 36 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
727068 BytesDie Ganzzahldivision schlägt erneut zu. Bearbeiten: 2 Bytes dank @Shaggy gespeichert. Sparte weitere 2 Bytes, indem es viel rekursiver gemacht wurde, so dass es möglicherweise bei kleineren Werten als früher fehlschlägt.
quelle
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 Bytes
Probieren Sie es online!
Verwendet den ganzzahligen Divisionstrick wie alle anderen Antworten.
Verwendet 1-basierte Indizes.
Erläuterung
quelle
Japt , 11 Bytes
Versuch es
Erläuterung
Implizite Eingabe einer Ganzzahl
U
.Generieren Sie ein Array von Ganzzahlen von 1 bis
U
.Filter (
f
) Co-Primzahlen vonU
.Reduzieren Sie durch Multiplikation.
Addiere 1.
Teilen Sie
U
das Ergebnis durch , begrenzen Sie es und geben Sie es implizit aus.quelle
Axiom, 121 Bytes
Füge einen Typ hinzu, ungolf das und das Ergebnis
quelle
JavaScript (ES6),
838180787668 BytesMein erster Versuch war ein paar Bytes länger als Neils Lösung, weshalb ich ihn ursprünglich zugunsten der unten aufgeführten Array-Reduktionslösung verworfen habe. Ich habe seitdem Golf gespielt, um mit Neil zu binden.
Versuch es
Nicht rekursiv, 76 Bytes
Ich wollte versuchen, einer nicht rekursiven Lösung zu zeigen, wie es ausgehen würde - nicht so schlimm, wie ich es erwartet hatte.
Versuch es
quelle