Created
February 6, 2018 21:45
-
-
Save AnthonyMikh/d694ad13c738ce4dd3984db10a7e9517 to your computer and use it in GitHub Desktop.
Решение задачи №68 от UniLecs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fibs = 1 : 1 : zipWith (+) fibs (tail fibs) | |
fibs2 = map (*2) fibs | |
solution n = fibs2 !! n | |
main = print $ solution 8 | |
-- > 68 |
Функция fibs
возвращает бесконечный список чисел Фибоначчи. Функция fibs2
возвращает бесконечный список удвоенных чисел Фибоначчи. Оператор индексации !!
возвращает n+1
элемент списка (т. к. индекс начинается с нуля).
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Доказательство формулы:
Назовём последовательность из 4 и 7 фиксированной длины, в которой ни одна цифра не повторяется подряд более, чем два раза, валидной. Валидную последовательность, начинающуюся с 4, назовём 4-валидной (понятие 7-валидной вводится по аналогии). Найдём число 4-валидных последовательностей длины
n
. Для небольшихn
это числоV4(n)
можно найти полным перебором:Теперь допустим, что нам известно
V4(n)
, и мы хотим найтиV4(n+1)
. Для этого возьмём все 4-валидные последовательности длиныn
и будем приписывать цифру в конце. Вне зависимости от конкретного содержания всегда можно из 4-валидной последовательности получить 4-валидную последовательность длиной на единицу больше, если приписать цифру, отличную от цифры на конце. Когда же можно приписать цифру, совпадающую с конечной? Очевидно, когда две последние цифры различны. Число 4-валидных последовательностей длиныn
, две последние цифры которой различны, равноV4(n-1)
, т. к. такую последовательность можно получить из любой 4-валидной последовательности длиныn-1
, просто приписав цифру, отличную от конечной. Т. о.,V4(n+1) = V4(n) + V4(n-1)
,то есть с точностью до индексов совпадает с последовательностью чисел Фибоначчи.
V4(n) = F(n+1)
, гдеF(n)
-n
-ое число Фибоначчи (F(1) = 1, F(2) = 1
).Теперь рассмотрим преобразование
f: 4 -> 7, 7 -> 4
. Если к каждой цифре 4-валидной последовательности применитьf
, получим 7-валидную последовательность, и наоборот. Т. к. это преобразование, очевидно, взаимно однозначное, получаем, чтоV4(i) = V7(i)
, а т. к. сумма количеств 4-валидных и 7-валидных последовательностей заданной длины равно количеству валидных последовательностей заданной длины, получаем, что для длиныn
их число задаётся формулой2*V4(n) = 2*F(n+1)
, что и требовалось доказать.