如何找到此递归关系的第N个术语
F(n) = F(n-1) + F(n-2) + F(n-1)*F(n-2)
我必须找到模数10^9+7
的递归关系的第N个术语。
我知道如何找到线性递归关系的第N个术语,但无法继续进行此操作。
1<=N<=10^9
提供F(0)和F(1)作为输入。
答案 0 :(得分:12)
有一个技巧。让G(n) = F(n) + 1
。等式
F(n) = F(n-1) + F(n-2) + F(n-1)*F(n-2)
变为
G(n) - 1 = G(n-1) - 1 + G(n-2) - 1 + (G(n-1) - 1) * (G(n-2) - 1)
= G(n-1) - 1 + G(n-2) - 1 + G(n-1)*G(n-2) - G(n-1) - G(n-2) + 1
= G(n-1)*G(n-2) - 1,
所以向两边添加1
,
G(n) = G(n-1)*G(n-2).
这是熟悉的Fibonacci复发的乘法等价物。解决方案是
G(n) = G(0)^Fib(n-1) * G(1)^Fib(n),
与线性复发理论类比(其中Fib(-1) = 1
和Fib(0) = 0
和Fib(1) = 1
),因为
G(n-1)*G(n-2) = G(0)^Fib(n-2) * G(1)^Fib(n-1)
* G(0)^Fib(n-3) * G(1)^Fib(n-2)
= G(0)^Fib(n-1) * G(1)^Fib(n)
= G(n).
因此,
F(n) = (F(0)+1)^Fib(n-1) * (F(1)+1)^Fib(n) - 1,
通过每个Fermat's little theorem的矩阵幂方法mod Fib
和指数mod p-1
进行p
次计算。