可能重复:
Recurrence Relations
如何在tribonacci系列中找到第n个数字?
我需要和算法足够快,n
最多10 ^ 15。
Tribonacci数被定义为 a(n)= a(n-1)+ a(n-2)+ a(n-3),其中(0)= a(1) = 0,a(2)= 1。
答案 0 :(得分:7)
对于具有线性递归的任何序列,矩阵求幂算法都可以工作。
如果是序列有复发
a[k] = x*a[k-1] + y*a[k-2] + z*a[k-3]
对于k >= 3
和初始值a[0], a[1], a[2]
,您可以通过乘以
(a[n+2], a[n+1], a[n])
|x y z|^n |a[2]|
|1 0 0| * |a[1]|
|0 1 0| |a[0]|
通过在O(log n)
步骤中重复平方,使用取幂,可以将矩阵提升到n th 幂。