Определите 1-индексированную последовательность следующим образом:
A083569(1) = 1
A083569(n)
гдеn
целое число больше, чем1
наименьшее целое число m, не встречающееся ранее, напримерm+n
простое число.
Ваша задача взять n
и вернуться A083569(n)
.
n A083569(n)
1 1
2 3
3 2
4 7
5 6
6 5
7 4
8 9
9 8
10 13
11 12
12 11
13 10
14 15
15 14
16 21
17 20
18 19
19 18
20 17
Больше тестов можно найти здесь . Оригинальную последовательность на OEIS можно найти здесь .
Это код-гольф . Кратчайший ответ в байтах побеждает. Применяются стандартные лазейки .
Ответы:
Haskell ,
878683807469 байтСпасибо xnor за предложенные изменения, которые сохранили 3 байта!
Попробуйте онлайн!
Я новичок в Haskell, и Haskell в гольф, обратная связь приветствуется!
объяснение
Мы определяем функцию
f n
. Мы определяем,f n
чтобы быть первым элементом!!0
списка:Сломано это:
источник
[2,3..]
Может быть просто[2..]
, подсчитывая на 1 по умолчанию. Там есть встроенныйnotElem
.notElem
но первый совет был полезен, и я обязательно оставлю второй в моем заднем кармане.f 1
неправильной, должно быть 1.Желе ,
1615 байтПредполагается, что A083569 (n) ≤ n² (последовательность, по-видимому, растет линейно).
Попробуйте онлайн!
Как это работает
источник
A083569(n)
самоеn
большее простое числоn
по его определению больше, чем самое2n
простое, которое (дляn≥3
) меньше, чем4n*log(n)
по результатам Россера-Шенфельда.Pyth -
181715 байтСпасибо @isaacg за то, что сэкономили мне два байта!
Вернувшись на этот сайт, немного поработав, будем надеяться, что игра в гольф будет продолжена.
Попробуйте это онлайн здесь .
источник
-TY
на один байт короче!/YT
, и правдив в тех же случаях.+hdT
на+Th
.C # (.NET Core) , 169 байт
Попробуйте онлайн!
До сих пор наиболее неэффективный способ расчета результатов, поэтому , пожалуйста , воздержитесь от расчета
f(n)
дляn>=30
этого кода. Первым шагом является рекурсивное вычисление значений отf(1)
до,f(n-1)
а затем переход к вычислениюf(n)
путем поиска первого,i
такогоn+i
как простое число,i
которого нет в предыдущем списке значений.источник
Сборка x86-64,
5755 байтЯ новичок в гольф, поэтому комментарии / отзывы приветствуются.
Примечание: это оптимизировано для длины машинного кода, а не для длины исходного кода.
Определяет функцию, используя стандартное соглашение (то есть возвращаемое значение в eax, первый аргумент в edi, все регистры, сохраненные вызывающим абонентом, кроме ebx), которое принимает 32-разрядное целое число без знака и возвращает наименьшее m и т. Д.
Источник:
Попробуйте онлайн!
источник
Clojure,
158155 байтовЭто может все еще иметь немного жира, я не совсем доволен,
(+ 1 i j)
но это был самый простой способ справиться с базовым случаемn = 1
и остальным.((set r)j)
возвращаетnil
if, еслиj
его нет в наборе, а(seq ())
в пустом списке также возвращает nil. Вычисляетn = 1000
за 48 секунд.Обновление: снято
nil
с=
проверки, так как код работает правильно и без него.источник
Рубин , 62 + 8 = 70 байт
Использует
-rprime
флаг.Попробуйте онлайн!
источник
Python,
194170110 байт84 байта, сохраненные Leaky Nun
2 байта сохранены матеманданом
Определяет функцию s (n), которая принимает число в качестве входных данных и возвращает A083569 (n).
Попробуйте онлайн
источник
p=lambda n:any(n%i<1for i in range(2,n))
для проверки первичности.while(i in a)|any(...