Tribonacci系列

时间:2012-09-08 18:33:54

标签: c++ algorithm

  

可能重复:
  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。

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 幂。