提出
经核准的
编辑
来自itertools导入产品 作为 生产
返回w-in的3*sum(cf(“0”+“”.join(w))生产产品(“012”,重复=n-1)
打印(范围内n的[a(n)(0, 14)]) #迈克尔·S·布兰尼基2021年4月16日
迈克尔·S·布兰尼基:米歇尔,谢谢你抓到了!对程序进行轻微更改,包括生成(0)。
大卫·A·科内斯:不知道如何实现最佳加速。我们可以用递归来实现。如果一个单词w是一个n个字母的立方单词,那么2||w可能是一个(n+1)个立方字母的单词(||是串联的)。使用这种递归结构会省去一堆不必要的检查,但可能会以串联为代价。另一种方法是使用下一个单词。例如,如果已知2211100不是无立方体的,因为第五个字母上的内容,那么我们可以跳过一些检查跳到2211200。我还没有为此编写代码,因为我认为我无法添加术语,因为仍有很多检查。
大卫·A·科内斯:是的,*3技巧很好。找到了!
打印(范围内n的[a(n)(1, 0, 14)]) #迈克尔·S·布兰尼基2021年4月16日
米歇尔·马库斯:好吗?
迈克尔·S·布兰尼基:对于包含三个或更多字母的字母表,您还可以利用我使用的第一种对称性(*3)。也就是说,你可以考虑第二个字母的对称性。我在其他一些序列中也这样做了。
迈克尔·S·布兰尼基:@20:00注释:“ops”-->“bit operations”
1, 3, 9, 24, 66, 180, 486, 1314, 3558, 9606, 25956, 70134, 189462, 511866, 1382880, 3735888, 10092762, 27266340, 73661610, 199001490, 537615066, 1452399978,3923748270
a(19)-a(2122)来自迈克尔·S·布兰尼基2021年4月16日
大卫·A·科内斯:您可以简化搜索。就像最后三位数字一样,可能有3^3种可能性。您只需要考虑000(取消)、100、110、210。通过排列0、1和2,可以找到其他可能性。如果0100是这样的立方单词,那么0200、1211、1011、2122、2022也是如此。
大卫·A·科内斯:所以你可以做6*你的结果
大卫·A·科内斯:你检查了a(22)中所有3^22个22字母的单词了吗?
迈克尔·S·布兰尼基:没错,你可以像你说的那样轻松搜索。我的函数会“短路”,所以我会加快速度(也就是说,我不会检查每个单词的每个字母)。我在ops中实现了一些类似的功能,这是真正的加速功能。
1, 3, 9, 24, 66, 180, 486, 1314, 3558, 9606, 25956, 70134, 189462, 511866, 1382880, 3735888, 10092762, 27266340, 73661610, 199001490, 537615066,1452399978
a(19)-a(2021)来自迈克尔·S·布兰尼基,2021年4月16日
1, 3, 9, 24, 66, 180, 486, 1314, 3558, 9606, 25956, 70134, 189462, 511866, 1382880, 3735888, 10092762, 27266340, 73661610, 199001490,537615066
a(19) -一(20) 从迈克尔·S·布兰尼基2021年4月16日
1, 3, 9, 24, 66, 180, 486, 1314, 3558, 9606, 25956, 70134, 189462, 511866, 1382880, 3735888, 10092762, 27266340, 73661610,199001490
a(19)来自迈克尔·S·布兰尼基2021年4月16日
迈克尔·S·布兰尼基:将在添加更多条款后提议