Задача состоит в том, чтобы как можно быстрее вычислить 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.
Ведущие записи по языку
- п = 599 в Руст бу Андерс Касерорг.
- n = 30 в С по Грими. Параллельная версия получает до 32 при запуске в Cygwin.