背景
甲分形序列是一个整数序列,其中可以除去的每一个整数的第一次出现,并用相同的序列之前结束。
这样一个非常简单的序列称为金伯林的释义。您从正自然数开始:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
然后,您可以在空白处进行调整:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
然后重复使用序列本身(包括空白)填充空白:
1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...
那就是我们的分形序列!现在让我们取部分和:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
但是,如果我们重复此过程呢?分形新序列(即从上述步骤中获得的部分和):
1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...
并再次取部分和:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
冲洗,重复。事实证明,这个过程是收敛的。每次重复此过程时,序列的较大前缀将保持固定。经过无数次迭代后,您将获得OEIS A085765。
有趣的事实:只要原始序列以开头,即使我们不是从自然数开始的,该过程也会收敛到相同的序列1
。如果原始序列以其他序列开头x
,则x*A085765
取而代之。
挑战
给定正整数N
,输出N
收敛序列的th个元素。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
您可以选择索引N
是基于0还是基于1。
测试用例
该序列以以下内容开头:
1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517
因此输入5
应该导致输出9
。
这是一个天真的CJam参考实现,它生成第一个N
数字(N
在STDIN上给定)。请注意,您的代码应仅返回N
th元素,而不是整个前缀。
N
th项,对吗?