我希望能够创建Ulam号码序列,并能够找到第n个Ulam号码。例如,如果输入为“8”,则输出应为13.如果输入为700,则输出应为第700个Ulam数(不知道它是什么)。前两个数字是1和2。
我想我需要一个初始化为1和2的数组,并使用双循环来检查下一个数字是否是具有唯一表示的最小可能值。
我只是不确定如何用C编写代码。但即便是伪代码也可以帮助我解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
Ulam序列中的Ulam number必须只能以一种方式表示为两个前辈的总和。
请注意,这两个前辈不是"独立" - 如果你选择一个,那么你可以计算第二个。
示例:序列以数字1,2,3,4,6,8,11,13,16,18开头。
例如21下一个号码?开始检查所有以前的数字,如下所示:
1
。然后是1 + x = 21
。在这里,x = 21 - 1 = 20
。 20
是序列的一个元素吗?否。2
。然后是2 + x = 21
。在这里,x = 21 - 2 = 19
。 19
是序列的一个元素吗?否。3
。然后是3 + x = 21
。在这里,x = 21 - 3 = 18
。 18
是序列的一个元素吗?是=>我们找到了一个代表:21 = 3 + 18
。4
。然后是4 + x = 21
。在这里,x = 21 - 4 = 17
。 17
是序列的一个元素吗?否。6
。然后是6 + x = 21
。在这里,x = 21 - 6 = 15
。 15
是序列的一个元素吗?否。8
。然后是8 + x = 21
。在这里,x = 21 - 8 = 13
。 13
是序列的一个元素吗?是=>我们找到了另一种表示形式:21 = 8 + 13
,因此21
不是序列的成员。因此,要检查数字是否是序列的成员,您需要检查其所有前任。
如果以所述方式检查所有数字,您将逐一发现序列的所有成员。到达所需索引时停止。