Pendahuluan - Apa itu kalung?
Kalung adalah sesuatu yang membuat orang OEIS terobsesi. Tantangan OEIS memiliki seperti 5 urutan kalung.
Kalung panjang biner n
adalah lingkaran dengan n
manik - manik yang bisa 0
atau 1
. Dua kalung adalah sama jika satu dapat diputar untuk menjadi yang lain, dan dua kalung yang dapat dibalik adalah sama jika satu dapat diputar, terbalik, atau terbalik dan diputar untuk menjadi yang lain.
Kalung primitif adalah kalung yang tidak dapat dinyatakan sebagai lebih dari satu salinan untaian manik-manik yang dirantai menjadi satu. Perhatikan bahwa salinan harus dikumpulkan semua dalam urutan yang sama (tidak terbalik) agar kalung dianggap non-primitif.
Sebagai contoh, mari kita lihat kalung ini: 0 1 1 0 1 1
. Itu tidak primitif karena dapat diekspresikan sebagai 0 1 1
diulang dua kali. 0 1 0 1 1
primitif.
0 1 1 0
primitif karena 0 1
dan 1 0
tidak dianggap sebagai string yang sama. Kalung ini setara dengan 1 1 0 0
karena dapat diputar satu manik untuk menjadi yang satu ini, tetapi tidak setara dengan 0 1 0 1
(yang tidak primitif dengan cara).
Tantangan
Dengan bilangan bulat non-negatif n
, kembalikan jumlah kalung biner primitif panjang reversibel yang berbeda n
. Input dan output masing-masing sebagai integer tunggal.
Beberapa istilah pertama dari urutan ini adalah 1, 2, 1, 2, 3, 6, 8, 16, 24, 42, 69, 124, 208, 378, 668, 1214, 2220, 4110
, 0-diindeks.
Ini adalah OEIS A001371
Referensi Implementasi di Python 3 - cukup lambat
0 1 0 1
primitif? Bukankah itu 0 1
diulang dua kali?