En mi habitación, tengo este reloj geek (haga clic para ampliar):
La mayoría de estos no son difíciles de entender, pero el de las 4 en punto es particularmente complicado:
Normalmente, una fracción como 1/2 no tiene sentido en aritmética modular ya que solo están involucrados los enteros. La forma correcta, entonces, es ver esto como el inverso de 2, o para decirlo de otra manera, es ese número donde . Dicho de esta manera, un momento de pensamiento lo revelará porque sí .
Sin embargo, simplemente encontrar el inverso multiplicativo sería demasiado fácil como un desafío. Entonces, aumentemos la dificultad de la exponenciación, o en otras palabras, encontremos el logaritmo modular o el logaritmo discreto de 2. En este caso, 3 es el logaritmo modular de 2 con respecto a 7. Para aquellos de ustedes con teoría de números / álgebra abstracta antecedentes, esto significa calcular el orden multiplicativo de 2 módulo n.
El reto
Dado un entero impar positivo n
mayor que 1, genera el entero positivo más pequeño x
donde .
Ejemplos
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
fuente
x^-1
significa inverso multiplicativo de x , es decir, el número y tal que xy = 1 . En el campo de los números reales, 2 ^ -1 = 0.5 . En el anillo de enteros módulo 7 , 2 ^ -1 = 4 .Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
Pyth -
98 bytesTest Suite .
f
se ilumina desde el valor predeterminado de 1 hasta que encuentra alguna x tal que la exponenciación modular con 2 y la entrada sea igual a 1.fuente
Python, 32 bytes
Comenzando con 2, dobla el módulo n hasta que el resultado sea 1, incrementándose recursivamente cada vez, y terminando con una cuenta de 1 para el valor inicial de 2.
fuente
Mathematica, 24 bytes
Acabo de usar un incorporado para esto.
fuente
APL, 8 bytes
Este es un tren de funciones monádicas que acepta un número entero a la derecha y devuelve un número entero. Para llamarlo, asígnelo a una variable.
Explicación (llamando a la entrada
x
):Tenga en cuenta que el resultado puede ser incorrecto para entradas grandes ya que el exponencial se redondea.
fuente
⍴∘∪⊢|2*⍳
.Pyth, 14 bytes
Explicación:
Pruébalo aquí
fuente
66\n132\n198
una entrada de201
.JavaScript (ES6), 28 bytes
Basado en el brillante enfoque recursivo de @ xnor.
fuente
=>
, creo).f(3)
. Por alguna estúpida razón, ese sitio web no le permitirá usar esta función a menos que lo declare conlet
ovar
. Prueba esto.05AB1E , 11 bytes
Código:
Explicación:
fuente
Julia,
2524 bytesEsto es simple:
2.^(1:n)%n
encuentra los poderes de 2 dentro del conjunto,∪
esunion
, pero sirve comounique
y devuelve solo uno de cada poder único (y debido a que es un operador infijo, puedo unirme con 1 para guardar un byte sobre el∪(2.^(1:n)%n)
enfoque). Luegoendof
cuenta el número de poderes únicos, porque una vez que llegue a 1, solo repetirá los poderes existentes, por lo que habrá tantos valores únicos como el poder que produce 1.fuente
En serio, 14 bytes
Hex Dump:
Pruébalo en línea
Explicación:
fuente
Haskell, 30 bytes
El argumento auxiliar
t
se duplica módulo an
cada paso hasta que sea igual a 1.fuente
Japt, 17 bytes
Pruébalo en línea!
Esto sería tres bytes más corto si Japt tuviera la función "buscar el primer elemento que coincida con esta condición". Comienza a trabajar en uno
Cómo funciona
fuente
PARI / GP, 20 bytes
fuente
Julia,
3326 bytesEsta es una función lambda que acepta un entero y devuelve un entero. Para llamarlo, asígnelo a una variable.
Construimos un conjunto como 2 elevado a cada potencia entera de 1 a
n
, luego encontramos el índice del primer 1 en este conjunto.Guardado 7 bytes gracias a Glen O!
fuente
2.^(1:n)%n
.Perl 5, 29 bytes
Punta de sombrero.
fuente
MATL , 13 bytes
Se ejecuta en Octave con la confirmación GitHub actual del compilador.
Funciona para entrada hasta
51
(debido a limitaciones deldouble
tipo de datos).Ejemplo
Explicación
fuente
Unicornio ,
1307 1062976 bytesEstoy tratando de hacer del unicornio un lenguaje de golf serio, pero eso es un poco difícil ...
Espero encontrar una manera de retener el "unicornio" del lenguaje mientras hago muchos menos bytes
Imagen:
Utiliza una codificación personalizada .
Esta respuesta no es competitiva porque usa una versión de Unicorn hecha después de este idioma
fuente
((2)2(2))(())
sale del código con el intérprete de @ Downgoat?𝔼𝕊𝕄𝕚𝕟, 11 caracteres / 22 bytes
Try it here (Firefox only).
Utiliza un bucle while. Esta es una de las pocas veces que un bucle while es mejor que el mapeo en un rango.
Explicación
fuente
CJam, 15 bytes
Peter Taylor salvó un byte. ¡Ordenado!
fuente
1fe|
que podrías:)
y luego)
después de hacer el#
.2qi,:)f#_,f%1#)
Prólogo, 55 bytes
Código:
Explicado:
Ejemplo:
Pruébalo en línea aquí
fuente