Fibonacci's Magic

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

fi={0                         i=01                         i=1fi1+fi2          i2f_i=\begin{cases} 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i=0\\ 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ i=1\\ f_{i-1}+f_{i-2}\ \ \ \ \ \ \ \ \ \ i \geq 2 \end{cases}

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

fn=pfn1+qfn2          n2f_n=pf_{n-1}+qf_{n-2}\ \ \ \ \ \ \ \ \ \ n\geq 2


fnf_nfkf_k

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

fi=fi1+fi2f_i=f_{i-1}+f_{i-2}

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

fn=fkfnk+1+fk1fnkf_n=f_{k}f_{n-k+1}+f_{k-1}f_{n-k}

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

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

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

fn12fn2+fn1fn=fn1fn+1fn2=(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 展开,可以得到:

fm12(fm1+fm2)2+fm1(fm1+fm2)=fm12fm22fm1fm2=(1)×(1)m1=(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}

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

fn12cn(modfn)f^2_{n-1}\equiv c^{n}\pmod{f_{n}}

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

fn1fn+1fn2=fn1(pfn+qfn1)fn2=qfn12+pfnfn1fn(pfn1+qfn2)=qfn12qfnfn2=q(fn2fnfn12)\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+2fn+1f_{n}=f_{n+2}-f_{n+1} ,即使下标为负数,我们也可以求出对应的 Fibonacci\rm Fibonacci 数。在本文的 Fibonacci\rm Fibonacci 定义下,正负 Fibonacci\rm Fibonacci 的转化可以写成:

fn=(1)n1fnf_{-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=fmfnm+1+fm1fnmf_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(fnm,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 最多的方案