Завдання полягає в тому, щоб обчислити 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)
кількість виразних масивів Y
s і N
s, які ви отримуєте при ітерації над усіма 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.