No meu quarto, tenho este relógio nerd (clique para ver o tamanho completo):
A maioria delas não é difícil de entender, mas a de quatro horas é particularmente complicada:
Normalmente, uma fração como 1/2 não faz sentido na aritmética modular, pois apenas números inteiros estão envolvidos. A maneira correta, então, é ver isso como o inverso de 2, ou, em outras palavras, é esse número em que . Posto assim, um momento de reflexão revelará isso porque .
No entanto, simplesmente encontrar o inverso multiplicativo seria muito fácil como um desafio. Então, vamos aumentar a dificuldade de exponenciação, ou seja, encontrar o logaritmo modular ou logaritmo discreto de 2. Nesse caso, 3 é o logaritmo modular de 2 em relação a 7. Para aqueles com teoria dos números / álgebra abstrata fundo, isso significa calcular a ordem multiplicativa de 2 módulo n.
O desafio
Dado um número inteiro ímpar positivo n
maior que 1, imprima o menor número inteiro positivo em x
que .
Exemplos
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
fonte
x^-1
significa inverso multiplicativo de x , ou seja, o número y tal que xy = 1 . No campo dos números reais, 2 ^ -1 = 0,5 . No anel dos números inteiros módulo 7 , 2 ^ -1 = 4 .Respostas:
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
Pitão -
98 bytesConjunto de Teste .
f
ilters do padrão 1 até encontrar algum x tal que a exponenciação modular com 2 e a entrada seja igual a 1.fonte
Python, 32 bytes
Começando com 2, dobra o módulo n até o resultado ser 1, incrementando recursivamente a cada vez e terminando com uma contagem de 1 para o valor inicial de 2.
fonte
Mathematica, 24 bytes
Eu apenas usei um built-in para isso.
fonte
APL, 8 bytes
Este é um trem de função monádica que aceita um número inteiro à direita e retorna um número inteiro. Para chamá-lo, atribua-o a uma variável.
Explicação (chamando a entrada
x
):Observe que o resultado pode estar incorreto para entradas grandes, pois o exponencial é arredondado.
fonte
⍴∘∪⊢|2*⍳
.Pitão, 14 bytes
Explicação:
Experimente aqui
fonte
66\n132\n198
uma entrada de201
.JavaScript (ES6), 28 bytes
Baseado na brilhante abordagem recursiva do @ xnor.
fonte
=>
, eu acho.)f(3)
. Por algum motivo estúpido, esse site não permitirá que você use essa função, a menos que você a declare comlet
ouvar
. Tente isso.05AB1E , 11 bytes
Código:
Explicação:
fonte
Julia,
2524 bytesIsso é simples -
2.^(1:n)%n
encontra os poderes de 2 dentro do conjunto,∪
éunion
, mas serve comounique
e retorna apenas um de cada poder exclusivo (e por ser um operador de infixo, posso unir-me a 1 para economizar um byte na∪(2.^(1:n)%n)
abordagem). Em seguida,endof
conta o número de poderes únicos, porque uma vez que atinge 1, ele apenas repete os poderes existentes, para que haja tantos valores únicos quanto o poder que produz 1.fonte
Sério, 14 bytes
Hex Dump:
Experimente Online
Explicação:
fonte
Haskell, 30 bytes
O argumento auxiliar
t
é duplicado no módulo an
cada passo até que seja igual a 1.fonte
Japonês, 17 bytes
Experimente online!
Isso seria três bytes mais curto se Japt tivesse uma função "encontre o primeiro item que corresponde a essa condição". Começa a trabalhar em um
Como funciona
fonte
PARI / GP, 20 bytes
fonte
Julia,
3326 bytesEsta é uma função lambda que aceita um número inteiro e retorna um número inteiro. Para chamá-lo, atribua-o a uma variável.
Construímos uma matriz como 2 elevada a cada potência inteira de 1 a
n
, e então encontramos o índice do primeiro 1 nessa matriz.Economizou 7 bytes graças a Glen O!
fonte
2.^(1:n)%n
.Perl 5, 29 bytes
Ponta do chapéu.
fonte
MATL , 13 bytes
Executa no Octave com o commit atual do GitHub do compilador.
Funciona para entrada até
51
(devido a limitações dodouble
tipo de dados).Exemplo
Explicação
fonte
Unicórnio ,
1307 1062976 bytesEstou tentando fazer do unicórnio uma linguagem séria para o golfe, mas isso é um pouco difícil ...
Espero encontrar uma maneira de reter o "unicórnio-ness" da linguagem e gerar muito menos bytes
Cenário:
Usa um costume codificação .
Esta resposta não é concorrente porque usa uma versão do Unicorn feita após esse idioma
fonte
((2)2(2))(())
sair do código com o intérprete do @ Downgoat?11, 11 caracteres / 22 bytes
Try it here (Firefox only).
Usa um loop while. Essa é uma das poucas vezes em que o loop while é melhor do que o mapeamento em um intervalo.
Explicação
fonte
CJam, 15 bytes
Peter Taylor salvou um byte. Arrumado!
fonte
1fe|
você poderia:)
e)
depois de fazer o#
.2qi,:)f#_,f%1#)
Prolog, 55 bytes
Código:
Explicado:
Exemplo:
Experimente online aqui
fonte