任务是尽快计算OEIS A005434。
考虑一个S长度为string 的二进制字符串n。从索引1,我们可以确定是否完全S[1..i+1]匹配从到的顺序。例如,S[n-i..n]i0n-1
S = 01010
给
[Y, N, Y, N, Y].
这是因为0matchs 0,01不匹配10,010matchs 010,0101不匹配1010 并最终01010匹配自身。
定义f(n)为Ys和Ns在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