首页 > 编程知识 正文

斐波那契数列 矩阵,斐波那契数列循环算法

时间:2023-05-06 09:56:36 阅读:29742 作者:345

QQ

由于n太大,表达式中递归爆炸的类型也可能超时。

|f(n ),f(n-1 )|=|f (n-1 ),f(n-1 )|*|1,1

1,0 |。

上面是递归公式

如果是n的话,可以坐(n-2 )个后面的矩阵。

因为矩阵乘法遵循交换律。 所以可以先与后面的(n-2 )矩阵相乘,最后与前面的矩阵相乘。

这样就成了快速乘方的问题。

# include cstdio # includeiostreamusingnamespacestd; 龙龙ans [2] [3]; 龙龙a [3] [3]; 龙龙c [3] [3]; const long long p=1000000007; void cf1 () for ) intI=1; i=2; I ) for(intj=1; j=2; j ) c[i][j]=a[i][j],a[i][j]=0; for(intI=1; i=2; I ) for(intj=1; j=2; j ) for(intk=1; k=2; k ) (a ) I ) j )=(a ) I ) j ) ) c ) k ) j ) ) p ); }返回; }void cf2 () for ) intI=1; i=1; I ) for(intj=1; j=2; j ) c[i][j]=ans[i][j],ans[i][j]=0; for(intI=1; i=1; I ) for(intj=1; j=2; j ) for(intk=1; k=2; k () ans[I][j]=) ans[I][j] ) c[I] ) k ) a[k][j] ) %p ); }返回; (}int main ) ) { long long n; 扫描(' % lld ',n ); ans[1][1]=1; ans[1][2]=1; a[1][1]=1; a[2][1]=1; a[1][2]=1; (if ) n==1||n==2) /无法回答(printf ) (1) (2) ) () () ) () ) ) 0返回0; (} n-=2; while(n ) ) if ) n%2) cf2 ); n/=2; cf1 ); }printf('%d ',ans[1][1]; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。