Если мы определим последовательность, подобную Фибоначчи, как f k (n) = (f k (n-1) + f k (n-2))% k , для некоторого целого числа k (где % - оператор по модулю), последовательность будет обязательно циклическим, потому что есть только k 2 различных значения для (f k (n-1), f k (n-2)) . Однако этот цикл обычно не включает все возможные пары значений, поэтому в зависимости от двух начальных значений f k (0) и f k (1) мы можем получить разные циклы. Например, для k = 2 у нас есть следующие четыре возможности, в зависимости от первых двух значений:
0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 1, 1, 0, 1, 1, 0, 1, 1, ...
1, 0, 1, 1, 0, 1, 1, 0, 1, ...
1, 1, 0, 1, 1, 0, 1, 1, 0, ...
Из-за циклической природы последовательностей здесь действительно только две принципиально разные последовательности с орбитами (0) и (0, 1, 1) . Давайте посмотрим на к = 3 :
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, ...
0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, ...
1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, ...
1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, ...
1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, ...
2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, ...
2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, ...
2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, ...
Опять же, есть только две разные орбиты: (0) и (0, 1, 1, 2, 0, 2, 2, 1) .
Для более высоких k мы можем получить больше орбит, но они все равно попадут в сравнительно небольшое количество классов. Например, k = 4 дает четыре орбиты (0) , (0,1,1,2,3,1) , (0, 2, 2) , (0, 3, 3, 2, 1, 3) и k = 5 три орбиты (0) , (0, 1, 1, 2, 3, 0, 3, 3, 1, 4, 0, 4, 4, 3, 2, 0, 2, 2, 4, 1) и (1, 3, 4, 2) .
Ваша задача в этой задаче - вычислить, сколько орбит последовательность генерирует для данного k . Это OEIS A015134 . Вот первые 100 значений (начиная с k = 1 ):
1, 2, 2, 4, 3, 4, 4, 8, 5, 6, 14, 10, 7, 8, 12, 16, 9, 16, 22, 16,
29, 28, 12, 30, 13, 14, 14, 22, 63, 24, 34, 32, 39, 34, 30, 58, 19,
86, 32, 52, 43, 58, 22, 78, 39, 46, 70, 102, 25, 26, 42, 40, 27, 52,
160, 74, 63, 126, 62, 70, 63, 134, 104, 64, 57, 78, 34, 132, 101, 60,
74, 222, 37, 38, 62, 328, 89, 64, 82, 124, 41, 86, 42, 172, 75, 44,
184, 178, 181, 132, 82, 180, 99, 140, 104, 246, 49, 50, 114, 76
Удостоверьтесь, чтобы проверить k = 11 , который является первым входом, который дает больше чем k орбит.
правила
Вам дано положительное целое число k, и вы должны вывести A015134 (k) .
Вы можете написать программу или функцию и использовать любой из стандартных методов получения ввода и предоставления вывода.
Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.