Fibonacci's Magic

Fibonacci\rm Fibonacci 数列的性质很多,有的常考,有的不常考。
这些性质都有可能是解题关键。这里稍作总结。
Fibonacci\rm Fibonacci 的定义很多,本文采取如下的递归定义:

fi={0                         i=01                         i=1fi−1+fi−2          i≥2f_i=\begin{cases} 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i=0\\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i=1\\ f_{i-1}+f_{i-2}\ \ \ \ \ \ \ \ \ \ i \geq 2 \end{cases}

广义 Fibonacci\rm Fibonacci 对于 f0f_0 和 f1f_1 的定义不变,剩下的项为:

fn=pfn−1+qfn−2          n≥2f_n=pf_{n-1}+qf_{n-2}\ \ \ \ \ \ \ \ \ \ n\geq 2


从 fnf_n 到 fkf_k

Fibonacci\rm Fibonacci 数最好的性质就是定义(出自《Imakf\rm Imakf 本纪》):

fi=fi−1+fi−2f_i=f_{i-1}+f_{i-2}

直接暴力展开上面的定义式可以得到 Fibonacci\rm Fibonacci 数的另一个重要性质

fn=fkfn−k+1+fk−1fn−kf_n=f_{k}f_{n-k+1}+f_{k-1}f_{n-k}

这个性质提供了从 fnf_n 凑 fkf_k 的一条直接途径。
广义 Fibonacci\rm Fibonacci 数列是类似的。

二次 fn,fn−1f_n,f_{n-1} 的关系

Fibonacci\rm Fibonacci 相邻项之间的关系除了定义式外还有一条有趣的性质:

fn−12−fn2+fn−1fn=fn−1fn+1−fn2=(−1)nf^2_{n-1}-f^2_{n}+f_{n-1}f_{n}=f_{n-1}f_{n+1}-f^2_n=(-1)^n

归纳证明。n=1n=1 时原式成立。假设当 n<mn<m 时原式成立。
对于 fmf_m,我们把上左式的 fmf_m 展开,可以得到:

fm−12−(fm−1+fm−2)2+fm−1(fm−1+fm−2)=fm−12−fm−22−fm−1fm−2=(−1)×(−1)m−1=(−1)m\begin{aligned} f^2_{m-1}-(f_{m-1}+f_{m-2})^2+f_{m-1}(f_{m-1}+f_{m-2})&=f^2_{m-1}-f ^2_{m-2}-f_{m-1}f_{m-2}\\ &=(-1)\times (-1)^{m-1}\\ &=(-1)^{m} \end{aligned}

我们可以把上面的式子写成另一个形式:

fn−12≡cn(modfn)f^2_{n-1}\equiv c^{n}\pmod{f_{n}}

其中 cc 是一个常数。
对于广义 Fibonacci\rm Fibonacci 数列,上式仍然成立,只是 cc 有所变化。
当 n=1n=1 时, fn−1fn+1−fn2=−1f_{n-1}f_{n+1}-f^2_{n}=-1。
当 n=2n=2 时,

fn−1fn+1−fn2=fn−1(pfn+qfn−1)−fn2=qfn−12+pfnfn−1−fn(pfn−1+qfn−2)=qfn−12−qfnfn−2=−q(fn−2fn−fn−12)\begin{aligned} f_{n-1}f_{n+1}-f^2_{n}&=f_{n-1}(pf_n+qf_{n-1})-f^2_n\\ &=qf^2_{n-1}+pf_nf_{n-1}-f_n(pf_{n-1}+qf_{n-2})\\ &=qf^2_{n-1}-qf_nf_{n-2}\\ &=-q(f_{n-2}f_{n}-f^2_{n-1}) \end{aligned}

所以对于 广义 Fibonacci\rm Fibonacci 数列而言, cc 应该为 −q-q 。

向负下标的扩展

通过 fn=fn+2−fn+1f_{n}=f_{n+2}-f_{n+1} ,即使下标为负数,我们也可以求出对应的 Fibonacci\rm Fibonacci 数。在本文的 Fibonacci\rm Fibonacci 定义下,正负 Fibonacci\rm Fibonacci 的转化可以写成:

f−n=(−1)n−1fnf_{-n}=(-1)^{n-1}f_{n}

gcd\rm gcd 相关

首先有个小性质:

gcd⁡(fn,fn+1)=1\gcd(f_{n},f_{n+1})=1
直接归纳就可以证明了...?

关于 gcd⁡\gcd 有一个更加广为流传的式子:

gcd⁡(fn,fm)=fgcd⁡(n,m)\gcd(f_n,f_m)=f_{\gcd(n,m)}

证明可以从辗转相除法入手。我们现在是 fnf_n ,我们怎么凑出 fmf_m 呢...?
Bingo\rm Bingo!不要忘记了第一个小标题的性质。以下假设 n>mn>m 。

fn=fmfn−m+1+fm−1fn−mf_n=f_mf_{n-m+1}+ f_{m-1}f_{n-m}

然后有 gcd⁡(a,b)=gcd⁡(a,a mod b)\gcd(a,b)=\gcd(a,a\text{ mod } b) 。所以 gcd⁡(fn,fm)=gcd⁡(fn−m,fm)=fgcd⁡(n,m)\gcd(f_n,f_m)=\gcd(f_{n-m},f_m)=f_{\gcd(n,m)}

下标和值上面的 gcd⁡\gcd 可以实现互换。

Fibonacci\rm Fibonacci 进制数

Fibonacci\rm Fibonacci 进制数,就是把一个数用若干个 Fibonacci\rm Fibonacci 数来表示,要求每个 Fibonacci\rm Fibonacci 数只能用一次。构造的话可以从高到低枚举 Fibonacci\rm Fibonacci 数一个一个删。

Fibonacci\rm Fibonacci 进制下有很好的性质。

  • 不会有连续两个 11 。
  • 可以通过将一个 11 平推得到该数新的斐波那契表示。平推后会得到两个 11 ,下标大的 11 必然不能再平推。所以,在 Fibonacci\rm Fibonacci 进制下,每两个 11 的段是相对独立的。考虑时可以一段一段考虑。

经典的例题有 BJOI2012最多的方案\rm BJOI2012 最多的方案 。