定义
正整数n
是一个实际数字(OEIS序列A005153),前提是所有较小的正整数都可以表示为的不同除数之和n
。
例如,18
是一个实际数字:其除数为1、2、3、6、9和18,小于18的其他正整数可以形成如下:
4 = 1 + 3 5 = 2 + 3 7 = 1 + 6
8 = 2 + 6 10 = 1 + 9 11 = 2 + 9
12 = 3 + 9 = 1 + 2 + 9 = 1 + 2 + 3 + 6
13 = 1 + 3 + 9 14 = 2 + 3 + 9 15 = 6 + 9
16 = 1 + 6 + 9 17 = 2 + 6 + 9
但这14
不是一个实际数字:它的除数是1、2、7和14,并且没有这些因数的子集加到4、5、6、11、12或13。
挑战
编写一个程序,函数或动词,以正整数作为输入,x
并返回或打印第x 个实际数字,该数字从1开始索引,以与OEIS保持一致。您的代码必须足够高效,才能在合理的台式计算机上在不到两分钟的时间内处理多达250000个输入。(注意,我在Java中的参考实现在不到0.5秒的时间内管理250000,而我在Python中的参考实现在12秒内管理它)。
测试用例
Input Expected output
1 1
8 18
1000 6500
250000 2764000
1000000 12214770
3000000 39258256