检查N是否是斐波纳契数列,以数字a和b而不是0和1开头

时间:2019-06-08 20:26:40

标签: algorithm math

我想检查给定数字'N'是否是斐波那契数列的一部分,该整数以整数'a'和'b'开头。当a = 0且b = 1时,我们将等式5 * N ^ 2 + 4或5 * N ^ 2-4-4看作是一个完美的正方形。我们如何得到这个公式?另外,是否有可能为a和b的其他值推导这样的方程式?

蛮力法-计算序列中的所有数字,直到N。我想进一步优化它。

示例:N = 13,a = 2,b = 4 斐波那契数列:2,4,6,10,16,... 输出:不可能

1 个答案:

答案 0 :(得分:0)

根据Formatting Tooltip Fields维基百科的文章,您可以判断数字是否在斐波那契数列中,因为当将该数字放入简化的Binet公式中时,我们需要得到一个整数n。因此,为了检查数字是否在常规斐波那契数列中,我们需要做的是创建自己的常规Binet公式并将其简化。在同一维基百科文章中,您可以找到以下this(感谢@fjardon),现在简化时会得到以下条件:

5 * x^2 +- 4 * (U1 - U0 * (1 - sqrt(5)) / 2) * (U0 * (1 + sqrt(5)) / 2 - U1)

需要成为一个完美的正方形。当U0U1是系列中的第一和第二个元素时。

  

不同的方法

对于您而言,“暴力法”可能还不错。我们知道连续的斐波那契数列的斐波那契数列比率收敛到黄金比率,在一般的斐波那契数列中它将是不同的比率。这意味着数字正在成倍增长。因此,如果我们要遍历斐波那契数列,我们将在N个迭代内达到log (ratio) (N)(假设您正在使用动态编程来生成该数列)。因此大约是对数时间。

如果您想改善这一点,可以使用general formula生成通用公式,然后执行martix form来查找您的电话号码。由于N是数字而不是它的索引,所以这里的时间复杂度要复杂一些,它将是O(log log N)