Вдохновленный этим Math.SE вопрос .
Фон
Последовательность Фибоначчи (называемая F
) - это последовательность, начинающаяся так 0, 1
, что каждое число ( F(n)
) (после первых двух) является суммой двух перед ним ( F(n) = F(n-1) + F(n-2)
).
Последовательность Фибоначчи mod K (называемая M
) - это последовательность чисел Фибоначчи mod K ( M(n) = F(n) % K
).
Можно показать, что последовательность K последовательности Фибоначчи является циклической для всех K, так как каждое значение определяется предыдущей парой, и существует только K 2 возможных пары неотрицательных целых чисел, оба из которых меньше K. Поскольку последовательность K Фибоначчи mod K является циклическим после своей первой повторяющейся пары терминов, число, которое не появляется в моде последовательности Фибоначчи K до того, как первая повторенная пара терминов никогда не появится.
Для К = 4
0 1 1 2 3 1 0 1 ...
Для К = 8
0 1 1 2 3 5 0 5 5 2 7 1 0 1 ...
Обратите внимание, что для K = 8 4 и 6 не появляются перед повторением 0 1
, поэтому 4 и 6 никогда не появятся в моде Последовательности Фибоначчи 8.
Вызов
Если задано целое число K, строго превышающее 0, выведите все неотрицательные целые числа, меньшие K, которые не отображаются в моде последовательности Фибоначчи K.
правила
Вы можете предположить, что K будет соответствовать вашему целочисленному типу (в пределах разумного ).
Если есть неотрицательные числа меньше K, которые не появляются в моде последовательности Фибоначчи K, ваша программа / функция должна выводить все такие числа любым разумным способом.
Если нет неотрицательных целых чисел меньше K, которые не появляются в моде последовательности Фибоначчи K, ваша программа / функция может указать это, возвращая пустой список, ничего не печатая, вызывая ошибку и т. Д.
Заказ не имеет значения.
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке.
Тестовые случаи
Генерация тестовых случаев онлайн!
Непустые тестовые случаи
8 [4, 6]
11 [4, 6, 7, 9]
12 [6]
13 [4, 6, 7, 9]
16 [4, 6, 10, 12, 14]
17 [6, 7, 10, 11]
18 [4, 6, 7, 9, 11, 12, 14]
19 [4, 6, 7, 9, 10, 12, 14]
21 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19]
22 [4, 6, 7, 9, 15, 17, 18, 20]
23 [4, 7, 16, 19]
24 [4, 6, 9, 11, 12, 14, 15, 18, 19, 20, 22]
26 [4, 6, 7, 9, 17, 19, 20, 22]
28 [10, 12, 14, 16, 18, 19, 23]
29 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27]
31 [4, 6, 9, 12, 14, 15, 17, 18, 19, 22, 25, 29]
32 [4, 6, 10, 12, 14, 18, 20, 22, 26, 28, 30]
33 [4, 6, 7, 9, 15, 17, 18, 20, 24, 26, 27, 28, 29, 31]
34 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30]
36 [4, 6, 7, 9, 10, 11, 12, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32]
37 [9, 10, 14, 17, 20, 23, 27, 28]
38 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 36]
39 [4, 6, 7, 9, 15, 17, 19, 20, 22, 24, 30, 32, 33, 35]
...
200 [4, 6, 12, 14, 20, 22, 28, 30, 36, 38, 44, 46, 52, 54, 60, 62, 68, 70, 76, 78, 84, 86, 92, 94, 100, 102, 108, 110, 116, 118, 124, 126, 132, 134, 140, 142, 148, 150, 156, 158, 164, 166, 172, 174, 180, 182, 188, 190, 196, 198]
...
300 [6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138, 150, 162, 174, 186, 198, 210, 222, 234, 246, 258, 270, 282, 294]
...
400 [4, 6, 10, 12, 14, 20, 22, 26, 28, 30, 36, 38, 42, 44, 46, 52, 54, 58, 60, 62, 68, 70, 74, 76, 78, 84, 86, 90, 92, 94, 100, 102, 106, 108, 110, 116, 118, 122, 124, 126, 132, 134, 138, 140, 142, 148, 150, 154, 156, 158, 164, 166, 170, 172, 174, 180, 182, 186, 188, 190, 196, 198, 202, 204, 206, 212, 214, 218, 220, 222, 228, 230, 234, 236, 238, 244, 246, 250, 252, 254, 260, 262, 266, 268, 270, 276, 278, 282, 284, 286, 292, 294, 298, 300, 302, 308, 310, 314, 316, 318, 324, 326, 330, 332, 334, 340, 342, 346, 348, 350, 356, 358, 362, 364, 366, 372, 374, 378, 380, 382, 388, 390, 394, 396, 398]
...
Пустые тестовые случаи (нет вывода, ошибки, пустого списка и т. Д. Является приемлемым выводом)
1, 2, 3, 4, 5, 6, 7, 9, 10, 14, 15, 20, 25, 27, 30, 35 ... 100 ...
Ответы:
Желе ,
98 байтПопробуйте онлайн!
На основе периода Пизано
p(n) <= 6n
от A001175 . Такжеp(n) <= 6n <= n^2
заn >= 6
иp(n) <= n^2
заn < 6
. Спас этот байт благодаря Денису.источник
²
должен работать вместо×6
.Haskell , 70 байт
Некоторое количество байтов сохранено благодаря Esolanging Fruit
8 байтов сэкономлено благодаря Laikoni
Попробуйте онлайн!
источник
read$show
работает вместоfromInteger
этого и сохраняет два байта.zip[1..x^2]
для усечения экономит еще несколько байтов: попробуйте онлайн!Perl 6 ,
43 42 3932 байтаПроверь это
Проверь это
Проверь это
Проверь это
Expanded:
источник
> <> 48 байтов
Попробуйте онлайн!
Принимает ввод через флаг -v.
Печатает много лишних строк, но выполняет свою работу. Это в основном использует первую строку для хранения набора чисел, которые до сих пор появлялись в последовательности.
Как это устроено:
источник
Python 2 , 69 байт
Попробуйте онлайн!
источник
MATL ,
1918 байтПопробуйте онлайн!
-1 байт благодаря Гизеппе.
источник
X~
!Python 3 , 91 байт
Попробуйте онлайн!
источник
Шелуха ,
13 1210 байтСпасибо @Zgarb за -2 байта!
Печатает пустой список на случай, если появятся все целые числа, попробуйте онлайн!
объяснение
источник
U2
чтобы получить самый длинный префикс, где ни одна соседняя пара не повторяется.Python 3 , 78 байт
Попробуйте онлайн!
Печатает набор, поэтому выходные данные для пустых тестовых случаев -
set()
это пустой набор.источник
R,
9286 байтСпасибо @Giuseppe за сохранение 6 байтов!
Попробуйте онлайн!
Довольно простая реализация ( предыдущая версия , но та же концепция):
источник
setdiff
, хорошая идея!1:k^2
подход, который используют все остальныеPython 3,
173152143131 байтОтдельное спасибо @ovs.
Попробуйте онлайн
Как это работает?
Первая функция принимает два параметра m и n и возвращает n-е число Фибоначчи mod m. Вторая функция просматривает числа Фибоначчи mod k и проверяет, повторяются ли 0 и 1. Он сохраняет числа в списке и сравнивает их со списком, содержащим числа 1-n. Дубликаты номеров удаляются, а остальные номера возвращаются.
источник
set()
цепочек и сравнения.05AB1E , 10 байтов
Попробуйте онлайн!
-3 байта благодаря Эмигне.
источник
Рубин , 47 байтов
Попробуйте онлайн!
Хотя он использует некоторую ту же логику, он не основан на ответе ГБ .
Объяснение:
источник
Common Lisp, 106 байт
Попробуйте онлайн!
источник
Пари / ГП , 55 байт
Попробуйте онлайн!
источник
Эликсир ,
148144 байтаПопробуйте онлайн!
Не особенно конкурентоспособный ответ, но было действительно весело для гольфа! Эликсир - довольно читаемый язык, но объяснение беспорядка символов в середине следует.
Это объяснение состоит из двух разделов: мода-Фибоначчи и работа над ним
Mod-выдумка:
Это возвращает бесконечный поток мод Фибоначчи
x
. Он начинается с аккумулятора{1,1}
и применяет следующую операцию до бесконечности: данный аккумулятор{p,n}
выводитp mod x
в поток. Затем установите аккумулятор в{n,p+n}
.Остальные:
источник
SNOBOL4 (CSNOBOL4) , 153 байта
Попробуйте онлайн!
источник
Рубин ,
5553 байтаПопробуйте онлайн!
источник
JavaScript (ES6), 84 байта
источник
Python 3, 76 байт
Это просто просматривает самый длинный из возможных циклов чисел Фибоначчи (n ^ 2) и создает список всех чисел, которые встречаются за это время. Для упрощения логики числа хранятся по модулю n.
источник