繁体   English   中英

在 Ulam 序列 C 中查找数字

[英]Find number in Ulam Sequence C

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

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

我只是不确定如何在 C 中编码。但是,即使是伪代码也能帮助我解决这个问题。 任何帮助表示赞赏。

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

注意两个前辈并不是“独立”的——如果你选择一个,那么你可以计算第二个。

示例:序列以数字 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不是序列的成员。

因此,要检查一个数字是否是序列的成员,您需要检查它的所有前辈。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM