背景
考虑定义如下的序列:
- 第一个元素为0;第二个元素为0。
- 第二个元素是4;
- 从第三个元素开始,其值可以通过以下方式计算:
- 取从0到序列的前一个元素的整数集(包括或不包括);
- 从集合中删除序列中较早出现的所有整数;
- 将集合的其余元素加在一起;那就是您想要的价值。
有趣的是,此序列似乎尚未在OEIS上。
任务
编写一个程序或函数,将整数n作为输入,并输出序列的第n个元素。
测试用例
该序列的前几个元素是:
- 0
- 4
- 6(1 + 2 + 3)
- 11(1 + 2 + 3 + 5)
- 45(1 + 2 + 3 + 5 + 7 + 8 + 9 + 10)
- 969(1 + 2 + 3 + 5 + 7…10 + 12…44)
- 468930(1 + 2 + 3 + 5 + 7 ... 10 + 12 ... 44 + 46 ... 968)
澄清说明
- 从理论上讲,如果您的语言在具有无限大整数的语言变体上运行并且可以访问无限量的内存,则该程序应该能够处理任意n。(没有大数字的语言不太可能超出468930,但这不是对答案进行硬编码的借口。)
- 您可以为序列选择基于0或基于1的索引(例如,取决于n = 1返回第一个元素,n = 2 返回第二个元素,依此类推;还是n = 0返回第一个元素,由您决定) ,n =第二个元素,依此类推)。
- 对您使用的算法没有要求,也没有效率要求。您可以直接实现序列的定义(即使效率很低),也可以实现结果相同的另一种算法。
胜利条件
这是code-golf,所以最短的正确程序(以字节为单位)将获胜。