Introducción - ¿Qué es un collar?
Un collar es algo con lo que la gente de OEIS está obsesionada. El desafío OEIS tiene como 5 secuencias de collar.
Un collar binario de longitud n
es un lazo con n
cuentas que son 0
o 1
. Dos collares son iguales si uno puede rotarse para convertirse en el otro, y dos collares reversibles son iguales si uno puede rotarse, invertirse o invertirse y rotarse para convertirse en el otro.
Un collar primitivo es uno que no se puede expresar como más de una copia de una cadena de cuentas encadenadas. Tenga en cuenta que las copias deben ensamblarse todas en el mismo orden (sin inversión) para que un collar se considere no primitivo.
Por ejemplo, vamos a echar un vistazo a este collar: 0 1 1 0 1 1
. No es primitivo porque se puede expresar como 0 1 1
repetido dos veces. 0 1 0 1 1
es primitivo
0 1 1 0
es primitiva debido 0 1
y 1 0
no se consideran la misma cadena. Este collar es equivalente a 1 1 0 0
porque se puede girar hacia la izquierda una cuenta para convertirse en este, pero no es equivalente a 0 1 0 1
(que por cierto no es primitivo).
Desafío
Dado un número entero no negativo n
, devuelve el número de collares binarios primitivos reversibles distintos de longitud n
. Entrada y salida como un solo entero cada uno.
Los primeros términos de esta secuencia son 1, 2, 1, 2, 3, 6, 8, 16, 24, 42, 69, 124, 208, 378, 668, 1214, 2220, 4110
0 indexados.
Esto es OEIS A001371
Implementación de referencia en Python 3 : bastante lenta
0 1 0 1
primitivo? ¿No se 0 1
repite dos veces?