斐波那契数列
斐波那契数列(The Fibonacci sequence,OEIS A000045)的定义如下:
该数列的前几项如下:
卢卡斯数列¶
卢卡斯数列(The Lucas sequence,OEIS A000032)的定义如下:
该数列的前几项如下:
研究斐波那契数列,很多时候需要借助卢卡斯数列为工具。
斐波那契数列通项公式¶
第
解析解¶
解析解即公式解。我们有斐波那契数列的通项公式(Binet's Formula):
这个公式可以很容易地用归纳法证明,当然也可以通过生成函数的概念推导,或者解一个方程得到。
当然你可能发现,这个公式分子的第二项总是小于
这里的中括号表示取离它最近的整数。
这两个公式在计算的时侯要求极高的精确度,因此在实践中很少用到。但是请不要忽视!结合模意义下二次剩余和逆元的概念,在 OI 中使用这个公式仍是有用的。
卢卡斯数列通项公式¶
我们有卢卡斯数列的通项公式:
与斐波那契数列非常相似。事实上有:
也就是说,
的全体解,恰好是
恰好是卢卡斯数列和斐波那契数列。因此有
矩阵形式¶
斐波那契数列的递推可以用矩阵乘法的形式表达:
设
于是我们可以用矩阵乘法在
快速倍增法¶
使用上面的方法我们可以得到以下等式:
于是可以通过这样的方法快速计算两个相邻的斐波那契数(常数比矩乘小)。代码如下,返回值是一个二元组
pair<int, int> fib(int n) {
if (n == 0) return {0, 1};
auto p = fib(n >> 1);
int c = p.first * (2 * p.second - p.first);
int d = p.first * p.first + p.second * p.second;
if (n & 1)
return {d, c + d};
else
return {c, d};
}
性质¶
斐波那契数列拥有许多有趣的性质,这里列举出一部分简单的性质:
- 卡西尼性质(Cassini's identity):
F_{n-1} F_{n+1} - F_n^2 = (-1)^n - 附加性质:
F_{n+k} = F_k F_{n+1} + F_{k-1} F_n - 取上一条性质中
k = n F_{2n} = F_n (F_{n+1} + F_{n-1}) - 由上一条性质可以归纳证明,
\forall k\in \mathbb{N},F_n|F_{nk} - 上述性质可逆,即
\forall F_a|F_b,a|b - GCD 性质:
(F_m, F_n) = F_{(m, n)} - 以斐波那契数列相邻两项作为输入会使欧几里德算法达到最坏复杂度(具体参见 维基 - 拉梅)。
斐波那契数列与卢卡斯数列的关系¶
不难发现,关于卢卡斯数列与斐波那契数列的等式,与三角函数公式具有很高的相似性。比如:
与
很像。以及
与
很像。因此,卢卡斯数列与余弦函数很像,而斐波那契数列与正弦函数很像。比如,根据
可以得到两下标之和的等式:
于是推论就有二倍下标的等式:
这也是一种快速倍增下标的办法。同样地,也可以仿照三角函数的公式,比如奇偶性、和差化积、积化和差、半角、万能代换等等,推理出更多有关卢卡斯数列与斐波那契数列的相应等式。
斐波那契编码¶
我们可以利用斐波那契数列为正整数编码。根据 齐肯多夫定理,任何自然数
并且
于是我们可以用
给
- 从大到小枚举斐波那契数
F_i F_i\le n - 把
n F_i i-2 - 如果
n - 最后在编码末位添加一个 1,表示编码的结束位置。
解码过程同理,先删掉末位的 1,对于编码为 1 的位置
模意义下周期性¶
考虑模
事实上,我们有一个远比它要强的结论。模
习题¶
- SPOJ - Euclid Algorithm Revisited
- SPOJ - Fibonacci Sum
- HackerRank - Is Fibo
-
Project Euler - Even Fibonacci numbers
本页面主要译自博文 Числа Фибоначчи 与其英文翻译版 Fibonacci Numbers。其中俄文版版权协议为 Public Domain + Leave a Link;英文版版权协议为 CC-BY-SA 4.0。
buildLast update and/or translate time of this article,Check the history
editFound smelly bugs? Translation outdated? Wanna contribute with us? Edit this Page on Github
peopleContributor of this article OI-wiki
translateTranslator of this article Visit the original article!
copyrightThe article is available under CC BY-SA 4.0 & SATA ; additional terms may apply.