在Ulam Sequence C中找到数字

时间:2017-09-28 14:47:15

标签: c sequence

我希望能够创建Ulam号码序列,并能够找到第n个Ulam号码。例如,如果输入为“8”,则输出应为13.如果输入为700,则输出应为第700个Ulam数(不知道它是什么)。前两个数字是1和2。

我想我需要一个初始化为1和2的数组,并使用双循环来检查下一个数字是否是具有唯一表示的最小可能值。

我只是不确定如何用C编写代码。但即便是伪代码也可以帮助我解决这个问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

Ulam序列中的Ulam number必须只能以一种方式表示为两个前辈的总和。

请注意,这两个前辈不是"独立" - 如果你选择一个,那么你可以计算第二个。

示例:序列以数字1,2,3,4,6,8,11,13,16,18开头。

例如21下一个号码?开始检查所有以前的数字,如下所示:

  • 假设总和的一个元素是1。然后是1 + x = 21。在这里,x = 21 - 1 = 2020是序列的一个元素吗?否。
  • 假设总和的一个元素是2。然后是2 + x = 21。在这里,x = 21 - 2 = 1919是序列的一个元素吗?否。
  • 假设总和的一个元素是3。然后是3 + x = 21。在这里,x = 21 - 3 = 1818是序列的一个元素吗?是=>我们找到了一个代表:21 = 3 + 18
  • 假设总和的一个元素是4。然后是4 + x = 21。在这里,x = 21 - 4 = 1717是序列的一个元素吗?否。
  • 假设总和的一个元素是6。然后是6 + x = 21。在这里,x = 21 - 6 = 1515是序列的一个元素吗?否。
  • 假设总和的一个元素是8。然后是8 + x = 21。在这里,x = 21 - 8 = 1313是序列的一个元素吗?是=>我们找到了另一种表示形式:21 = 8 + 13,因此21不是序列的成员。

因此,要检查数字是否是序列的成员,您需要检查其所有前任。

如果以所述方式检查所有数字,您将逐一发现序列的所有成员。到达所需索引时停止。