我有以下系列,无限长。
1 2 4 7 11 16 22 29 37.....
我需要找到一个给定的数字(比方说,N)是否存在于这个系列中,或者不是。该数字可以再次输入,并且可以毫不奇怪地是 long long 值。 考虑到系列是无限的,我认为创建一个数据结构来存储元素是无关紧要的(我在这里太笨了吗?)
仔细研究这个系列,我发现连续术语之间的差异形成了算术级数。
1 2 3 4 5 6 7 8.....
因此,一种最简单的方法是继续从1开始添加它们,如果我们达到 == N ,输出是,否则如果> N ,不是。 但这将是我能想到的最昂贵的算法。 我必须错过一些非常尖锐的逻辑,但不确定。
答案 0 :(得分:3)
根据这个系列,T(n) - n'系列。
T(1) = 1
T(2) - T(1) = 1
T(3) - T(2) = 2
T(4) - T(3) = 3
.
.
.
T(n) - T(n - 1) = n - 1
//sum of all above
T(n) - T(1) = 1 + 2 + 3 + 4 + 5 + ... + (n - 2) + (n - 1)
//T(1) = 1
T(n) - 1 = n(n - 1) / 2
2 * (T(n) - 1) = n^2 - n
//T(n) is your input number and check whether n has an integer
//solutions in following quadratic equation, if yes T(n) is in this series.
n^2 - n - 2 * (number - 1) = 0;
simply check if the value of " (1 + sqrt((8.0 * number) - 7)) / 2.0 " is integer.
答案 1 :(得分:0)
无需在任何数据结构中存储该系列。 你可以使用公式:
(n * (n + 1) / 2) + 1 = x
其中x是否。你想搜索。如果这个等式中存在任何真正的根,那么" X"退出。 例如:16
(n * (n + 1) / 2) + 1 = 16
答案 2 :(得分:0)
序列
1, 2, 4, 7, 11, 16, ...
从
中删除10, 1, 3, 6, 10, 15, ...
反过来
0, 0+1, 0+1+2, 0+1+2+3, 0+1+2+3+4, 0+1+2+3+4+5, ...
要查找序列中是否N
,您只需要检查N-1
是否是一系列自然数的总和,即是否存在p
{ {1}}。