В моей комнате у меня есть эти вызывающие часы (нажмите для увеличения):
Большинство из них не сложно понять, но тот, что для 4-х часов, особенно сложен:
Как правило, дробь наподобие 1/2 не имеет смысла в модульной арифметике, поскольку участвуют только целые числа. Правильный способ, таким образом, состоит в том, чтобы рассматривать это как обратное к 2 или, иначе говоря, это то число где . Проще говоря, минутная мысль покажет это, потому что .
Тем не менее, просто найти мультипликативное обратное было бы слишком просто в качестве проблемы. Итак, давайте поднимем сложность до возведения в степень, или, другими словами, найдем модульный логарифм или дискретный логарифм числа 2. В этом случае 3 - это модульный логарифм числа 2 относительно 7. Для тех из вас, кто имеет теорию чисел / абстрактную алгебру фон, это означает вычисление мультипликативного порядка 2 по модулю n.
Соревнование
Если положительное нечетное целое число n
больше 1, выведите наименьшее положительное целое число x
где .
Примеры
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
источник
x^-1
означает мультипликативный обратный x , т. е. число y такое, что xy = 1 . В области действительных чисел 2 ^ -1 = 0,5 . В кольце целых чисел по модулю 7 , 2 ^ -1 = 4 .Ответы:
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
Pyth -
98 байтТестовый пакет .
f
изменяет значение по умолчанию, равное 1, до тех пор, пока не найдет некоторый x такой, что модульное возведение в степень с 2 и входное значение равно 1.источник
Python, 32 байта
Начиная с 2, удваивается по модулю n до результата 1, рекурсивно увеличивается каждый раз и заканчивается счетом 1 для начального значения 2.
источник
Mathematica, 24 байта
Я просто использовал встроенный для этого.
источник
APL, 8 байт
Это последовательность монадических функций, которая принимает целое число справа и возвращает целое число. Чтобы вызвать его, назначьте его переменной.
Пояснение (вызов ввода
x
):Обратите внимание, что результат может быть неправильным для больших входных данных, поскольку экспонента округляется.
источник
⍴∘∪⊢|2*⍳
.Pyth, 14 байт
Объяснение:
Попробуй здесь
источник
66\n132\n198
за вход201
.JavaScript (ES6), 28 байт
Основан на блестящем рекурсивном подходе @ xnor.
источник
=>
, я думаю.)f(3)
. По какой-то глупой причине этот сайт не позволит вам использовать эту функцию, если вы не объявите ее с помощьюlet
илиvar
. Попробуй это.05AB1E , 11 байт
Код:
Объяснение:
источник
Юлия,
2524 байтаЭто просто -
2.^(1:n)%n
находит степени 2 в наборе,∪
естьunion
, но служитunique
и возвращает только одну из каждой уникальной степени (и, поскольку это инфиксный оператор, я могу объединиться с 1, чтобы сохранить байт в∪(2.^(1:n)%n)
подходе). Затемendof
подсчитывается количество уникальных способностей, потому что, как только он достигнет 1, он просто будет повторять существующие полномочия, так что будет столько же уникальных значений, сколько и энергии, которая производит 1.источник
Серьезно, 14 байтов
Шестнадцатеричный дамп:
Попробуйте онлайн
Объяснение:
источник
Haskell, 30 байт
Аргумент помощника
t
удваивается по модулюn
каждого шага, пока он не станет равным 1.источник
Japt, 17 байт
Попробуйте онлайн!
Это было бы на три байта короче, если у Japt была функция «найти первый элемент, который соответствует этому условию». Начинает работать на одном
Как это работает
источник
PARI / GP, 20 байтов
источник
Юлия,
3326 байтовЭто лямбда-функция, которая принимает целое число и возвращает целое число. Чтобы вызвать его, назначьте его переменной.
Мы строим массив как 2, повышенный до каждой целой степени от 1 до
n
, затем находим индекс первой 1 в этом массиве.Сохранено 7 байтов благодаря Glen O!
источник
2.^(1:n)%n
.Perl 5, 29 байт
Шляпа совет.
источник
MATL , 13 байт
Работает в Octave с текущим коммитом GitHub компилятора.
Работает для ввода до
51
(из-за ограничений типаdouble
данных).пример
объяснение
источник
Единорог ,
1307 1062976 байтЯ пытаюсь сделать единорога серьезным языком игры в гольф, но это немного сложно ...
Надеюсь, я найду способ сохранить «единорог» языка, делая при этом намного меньше байтов
Картина:
Использует пользовательскую кодировку.
Этот ответ не является конкурирующим, поскольку он использует версию Unicorn, созданную после этого языка.
источник
((2)2(2))(())
из кода с помощью интерпретатора @ Downgoat?𝔼𝕊𝕄𝕚𝕟, 11 символов / 22 байта
Try it here (Firefox only).
Использует цикл while. Это один из немногих случаев, когда цикл while лучше, чем отображение диапазона.
объяснение
источник
CJam, 15 байтов
Питер Тейлор сохранил байт. Ухоженная!
источник
1fe|
вы могли бы,:)
а затем)
после выполнения#
.2qi,:)f#_,f%1#)
Пролог, 55 байт
Код:
Разъяснение:
Пример:
Попробуйте онлайн здесь
источник