Introdução - O que é um colar?
Um colar é algo pelo qual as pessoas da OEIS são obcecadas. O desafio OEIS tem 5 sequências de colar.
Um colar binário de comprimento n
é um laço com n
contas que são 0
ou 1
. Dois colares são iguais se um pode ser girado para se tornar o outro, e dois colares reversíveis são os mesmos se um pode ser girado, revertido ou invertido e girado para se tornar o outro.
Um colar primitivo é aquele que não pode ser expresso como mais de uma cópia de um colar de contas encadeadas. Observe que as cópias devem ser montadas todas na mesma ordem (sem reversão) para que um colar seja considerado não primitivo.
Por exemplo, vamos dar uma olhada neste colar: 0 1 1 0 1 1
. Não é primitivo porque pode ser expresso como 0 1 1
repetido duas vezes. 0 1 0 1 1
é primitivo.
0 1 1 0
é primitivo porque 0 1
e 1 0
não é considerado a mesma sequência. Este colar é equivalente a, 1 1 0 0
porque pode ser girado à esquerda de uma conta para se tornar essa, mas não é equivalente a 0 1 0 1
(que não é primitivo a propósito).
Desafio
Dado um número inteiro não negativo n
, retorne o número de colares binários primitivos reversíveis distintos de comprimento n
. Entrada e saída como um único número inteiro cada.
Os primeiros termos dessa sequência são 1, 2, 1, 2, 3, 6, 8, 16, 24, 42, 69, 124, 208, 378, 668, 1214, 2220, 4110
indexados em 0.
Este é o OEIS A001371
Implementação de referência em Python 3 - bastante lenta
0 1 0 1
primitivo? Não é 0 1
repetido duas vezes?