的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。回想一下,二进制字符串只是1s和0s 的字符串,因此恰好有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。这些匹配,并且删除较少数量的字母不匹配。