In meinem Zimmer habe ich diese witzige Uhr (zum Vergrößern anklicken):
Die meisten davon sind nicht schwer herauszufinden, aber die für 4 Uhr ist besonders schwierig:
Normalerweise ist ein Bruch wie 1/2 in der modularen Arithmetik nicht sinnvoll, da nur ganze Zahlen beteiligt sind. Der richtige Weg ist also, dies als die Umkehrung von 2 zu sehen, oder anders ausgedrückt, ist diese Zahl, bei der . Auf diese Weise ausgedrückt, wird ein Moment des Nachdenkens dies offenbaren, weil .
Es wäre jedoch viel zu einfach, die multiplikative Inverse zu finden. Lassen Sie uns also die Schwierigkeit der Exponentiation erhöhen, oder mit anderen Worten den modularen Logarithmus oder den diskreten Logarithmus von 2 finden. In diesem Fall ist 3 der modulare Logarithmus von 2 in Bezug auf 7. Für diejenigen von Ihnen mit Zahlentheorie / abstrakter Algebra Hintergrund bedeutet dies, die multiplikative Ordnung von 2 Modulo n zu berechnen.
Die Herausforderung
Bei einer positiven ungeraden Ganzzahl n
größer als 1 wird die kleinste positive Ganzzahl ausgegeben, x
bei der .
Beispiele
n x
3 2
5 4
7 3
9 6
11 10
13 12
15 4
17 8
19 18
21 6
23 11
25 20
27 18
29 28
31 5
33 10
35 12
37 36
39 12
41 20
43 14
45 12
47 23
49 21
51 8
53 52
55 20
57 18
59 58
61 60
63 6
65 12
67 66
69 22
71 35
73 9
75 20
77 30
79 39
81 54
83 82
85 8
87 28
89 11
91 12
93 10
95 36
97 48
99 30
101 100
103 51
105 12
107 106
109 36
111 36
113 28
115 44
117 12
119 24
121 110
123 20
125 100
127 7
129 14
131 130
133 18
135 36
137 68
139 138
141 46
143 60
145 28
147 42
149 148
151 15
153 24
155 20
157 52
159 52
161 33
163 162
165 20
167 83
169 156
171 18
173 172
175 60
177 58
179 178
181 180
183 60
185 36
187 40
189 18
191 95
193 96
195 12
197 196
199 99
201 66
quelle
x^-1
bedeutet multiplikative Inverse von x , dh die Zahl y, so dass xy = 1 ist . Im Feld der reellen Zahlen ist 2 ^ -1 = 0,5 . Im Ring der ganzen Zahlen modulo 7 ist 2 ^ -1 = 4 .Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Pyth -
98 BytesTest Suite .
f
Filter vom Standardwert 1 bis zum Auffinden von x, sodass die modulare Exponentiation mit 2 und der Eingabe gleich 1 ist.quelle
Python, 32 Bytes
Beginnend mit 2, verdoppelt modulo n, bis das Ergebnis 1 ist, inkrementiert jedes Mal rekursiv und endet mit einer Zählung von 1 für den Anfangswert von 2.
quelle
Mathematica, 24 Bytes
Ich habe nur ein eingebautes dafür verwendet.
quelle
APL, 8 Bytes
Dies ist ein monadischer Funktionszug, der eine Ganzzahl rechts akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Erklärung (Aufruf der Eingabe
x
):Beachten Sie, dass das Ergebnis bei großen Eingaben möglicherweise falsch ist, da das Exponential gerundet wird.
quelle
⍴∘∪⊢|2*⍳
.Pyth, 14 Bytes
Erläuterung:
Probieren Sie es hier aus
quelle
66\n132\n198
für eine Eingabe von201
.JavaScript (ES6), 28 Byte
Basierend auf @ xnors brillantem rekursiven Ansatz.
quelle
=>
, denke ich.)f(3)
. Aus irgendeinem blöden Grund können Sie diese Funktion auf dieser Website nur verwenden, wenn Sie sie mitlet
oder deklarierenvar
. Versuche dies.05AB1E , 11 Bytes
Code:
Erläuterung:
quelle
Julia,
2524 BytesDies ist einfach -
2.^(1:n)%n
findet die Potenzen von 2 innerhalb der Menge,∪
dientunion
aber alsunique
und gibt nur eine von jeder eindeutigen Potenz zurück (und da es sich um einen Infix-Operator handelt, kann ich eine Vereinigung mit 1 herstellen, um ein Byte über den∪(2.^(1:n)%n)
Ansatz zu speichern ). Dannendof
zählt die Anzahl der einzigartigen Kräfte, denn wenn es 1 trifft, wird es nur die vorhandenen Kräfte wiederholen, so dass es so viele eindeutige Werte als die Kraft , die 1 erzeugt sein werden.quelle
Im Ernst, 14 Bytes
Hex Dump:
Probieren Sie es online
Erläuterung:
quelle
Haskell, 30 Bytes
Das Hilfsargument
t
wird modulo fürn
jeden Schritt verdoppelt, bis es 1 entspricht.quelle
Japt, 17 Bytes
Probieren Sie es online!
Dies wäre drei Bytes kürzer, wenn Japt die Funktion "Finde das erste Objekt, das dieser Bedingung entspricht" hätte. Startet die Arbeit an einem
Wie es funktioniert
quelle
PARI / GP, 20 Bytes
quelle
Julia,
3326 BytesDies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Wir konstruieren ein Array als 2, die auf jede ganzzahlige Potenz von 1 bis erhöht wird
n
, und finden dann den Index der ersten 1 in diesem Array.7 Bytes gespart dank Glen O!
quelle
2.^(1:n)%n
. Verwenden Sie einfach .Perl 5, 29 Bytes
Hutspitze.
quelle
MATL , 13 Bytes
Läuft auf Octave mit dem aktuellen GitHub-Commit des Compilers.
Funktioniert für Eingaben bis
51
(aufgrund von Einschränkungen derdouble
Datentyps).Beispiel
Erläuterung
quelle
Unicorn ,
1307 1062976 BytesIch versuche, Einhorn zu einer ernsthaften Golfsprache zu machen, aber das ist ein bisschen schwierig ...
Hoffentlich finde ich einen Weg, die "Einhornigkeit" der Sprache beizubehalten und gleichzeitig viel weniger Bytes zu erzeugen
Bild:
Verwendet eine benutzerdefinierte Codierung.
Diese Antwort ist nicht konkurrierend, da sie eine Version von Unicorn verwendet, die nach dieser Sprache erstellt wurde
quelle
((2)2(2))(())
der mit dem @ Downgoat-Interpreter aus dem Code herauskommt?𝔼𝕊𝕄𝕚𝕟 11 Zeichen / 22 Bytes
Try it here (Firefox only).
Verwendet eine while-Schleife. Dies ist einer der wenigen Fälle, in denen eine while-Schleife besser ist als die Zuordnung über einen Bereich.
Erläuterung
quelle
CJam, 15 Bytes
Peter Taylor hat ein Byte gespeichert. Ordentlich!
quelle
1fe|
du könntest:)
und dann)
nachdem du das getan hast#
.2qi,:)f#_,f%1#)
Prolog, 55 Bytes
Code:
Erklärt:
Beispiel:
Probieren Sie es hier online aus
quelle