Завдання полягає в тому, щоб обчислити OEIS A005434 якомога швидше.
Розглянемо двійковий рядок Sдовжини n. Індексація з 1, ми можемо визначити , якщо S[1..i+1]сірники S[n-i..n]точно для всіх i, щоб від 0до n-1. Наприклад,
S = 01010
дає
[Y, N, Y, N, Y].
Це тому, що 0сірники 0, 01не збігаються 10, 010збігаються 010, 0101не відповідають 1010 і, нарешті, 01010відповідають самим собі.
Визначте f(n)кількість виразних масивів Ys і Ns, які ви отримуєте при ітерації над усіма 2^nможливими бітовими рядками Sдовжини n.
Спостерігач помітить це питання - більш простий варіант іншого мого останнього питання . Однак я сподіваюся, що розумні хитрощі можуть зробити це набагато швидше і простіше.
Завдання
Для збільшення nпочинаючи з 1, ваш код повинен вивести n, f(n).
Приклад відповідей
Бо n = 1..24правильні відповіді:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
Оцінка балів
Ваш код повинен повторюватись, не n = 1даючи відповіді на кожного nпо черзі. Я встигну весь пробіг, убивши його через дві хвилини.
Ваш бал - найвищий показник, який nви отримали за той час.
У разі зрівноваження виграє перша відповідь.
Де буде перевірений мій код?
Я запускаю ваш код під Virtualbox в гостьовій машині Lubuntu (на моєму хості Windows 7).
Мій ноутбук має 8 Гб оперативної пам’яті та процесор Intel i7 5600U@2,6 ГГц (Broadwell) з 2 ядрами та 4 потоками. Набір інструкцій включає SSE4.2, AVX, AVX2, FMA3 та TSX.
Провідні записи по мові
- n = 599 в іржі бу Андерс Касеорг.
- n = 30 у С за Гримі. Паралельна версія дістається до 32, коли вона працює в Cygwin.