任务是尽快计算OEIS A005434。
考虑一个S
长度为string 的二进制字符串n
。从索引1
,我们可以确定是否完全S[1..i+1]
匹配从到的顺序。例如,S[n-i..n]
i
0
n-1
S = 01010
给
[Y, N, Y, N, Y].
这是因为0
matchs 0
,01
不匹配10
,010
matchs 010
,0101
不匹配1010
并最终01010
匹配自身。
定义f(n)
为Y
s和N
s在2^n
不同S
长度的所有可能位字符串上迭代时得到的不同数组的数目n
。
观察者会注意到这个问题是我最近另一个问题的一个简单的变体。但是,我希望巧妙的技巧可以使这一过程变得更快,更容易。
任务
为了增加n
开头1
,应该输出代码n, f(n)
。
示例答案
对于n = 1..24
,正确的答案是:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
计分
您的代码应从依次n = 1
给出每个答案的角度进行迭代n
。我将为整个运行计时,两分钟后将其终止。
您的分数是n
您当时获得的最高分。
如果是平局,则第一个答案将获胜。
我的代码将在哪里进行测试?
我将在Lubuntu来宾VM(在Windows 7主机上)的Virtualbox下运行您的代码。
我的笔记本电脑有8GB的RAM和一个带有2核和4线程的Intel i7 5600U@2.6 GHz(Broadwell)CPU。指令集包括SSE4.2,AVX,AVX2,FMA3和TSX。
每种语言的主要条目
- n = 599 in Rust bu Anders Kaseorg。
- N = 30在Ç由肮脏的。在cygwin中本地运行时,并行版本达到32。
使用-O3运行的math.uni-bielefeld.de/~sillke/SEQUENCES/autocorrelation-range.c(从OEIS页面链接)可以在<.02秒
—
内在
我认为这仍然是一个很酷的问题-但是可能最多有1000个?或问一个足够快的程序来打高尔夫
—
vroomfondel