的period
一个字符串的是最短的非零移位,使得字符串匹配本身,忽略任何份该突出端。因此,例如,abcabcab
具有period 3
。按照惯例,如果没有这种移位,则字符串的周期等于其长度。因此,时期abcde
为5
和时期a
为1
。
用更正式的术语来说,字符串的周期S
是最小的,i > 0
因此S[1,n-i] == S[i+1,n]
(从索引1
)。
对于给定的具有两个长度的幂的字符串S,我们将计算其所有具有两个长度的幂的前缀的周期。例如,考虑S = abcabcab
。我们将计算的周期为:
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
实际上,我们将仅输出周期数组,即[1, 2, 3, 3]
。
对于给定的2的正幂n
,请考虑所有可能的二进制字符串S
。回想一下,二进制字符串只是1
s和0
s 的字符串,因此恰好有2^n
这样的字符串(即2
幂n
)。对于每个,我们都可以计算这一周期数组。
挑战在于编写以
n
(2的幂)为输入的代码,并计算有多少个此类数组。
的答案n = 1, 2, 4, 8, 16, 32, 64, 128
是:
1, 2, 6, 32, 320, 6025, 216854, 15128807
的不同周期数组的完整集合n = 4
是:
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
得分了
我将在运行Ubuntu的计算机上运行您的代码10分钟。您的分数是n
这段时间内代码终止的最高分数。在平局的情况下,完成最大联合n
最快胜利的答案。如果在1秒钟内出现平局,则第一个答案将获胜。
语言和图书馆
您可以使用任何喜欢的语言和库。如果可能的话,请提供有关如何在Linux中运行/编译代码的完整说明。
您的代码实际上应该计算答案,而不是例如仅输出预先计算的值。
领先的作品
- Peter Taylor 在C#中n = 128时为2分21秒
- ISAACG 在Rust中n = 32时为9秒
n
,那么您会接受吗?硬编码和实际计算之间的边界在哪里还没有很好地定义。
abcab
。除了最后3个字母以外的都是abcab
。这些匹配,并且删除较少数量的字母不匹配。