码迷,mamicode.com
首页 > 其他好文 > 详细

1242 斐波那契数列的第N项

时间:2018-08-26 14:48:11      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:code   ++   矩阵   online   斐波那契   htm   tor   pac   black   

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 
斐波那契数列的定义如下:
 
F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n - 2) (n >= 2)
 
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)
给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。
 
Input
输入1个数n(1 <= n <= 10^18)。
Output
输出F(n) % 1000000009的结果。
Input示例
11
Output示例
89

 

 

矩阵快速幂模板题.

 

 1  #include <bits/stdc++.h>
 2 #define ll long long int
 3 using namespace std;
 4 typedef vector<ll> vec;
 5 typedef vector<vec> mat;
 6 const int M = 1e9+9;
 7 
 8 mat mul(mat &A,mat &B){
 9     mat C(A.size(),vec(B[0].size()));
10     for(int i=0;i<A.size();i++){
11         for(int j=0;j<B[0].size();j++){
12             for(int k=0;k<B.size();k++){
13                 C[i][j] = (C[i][j]+A[i][k]*B[k][j])%M;
14             }
15         }
16     }
17     return C;
18 }
19 
20 mat pow(mat A,ll n){
21     mat B(A.size(),vec(A.size()));
22     for(int i=0;i<A.size();i++)
23         B[i][i] = 1;
24     while(n>0){
25         if(n&1)
26             B = mul(B,A);
27         A = mul(A,A);
28         n>>=1;
29     }
30     return B;
31 }
32 
33 ll n;
34 int main(){
35     cin>>n;
36     mat A(2,vec(2));
37     A[0][0] = 1,A[0][1] = 1;
38     A[1][0] = 1,A[1][1] = 0;
39     A = pow(A,n);
40     cout<<A[1][0]<<endl;
41     return 0;
42 }

 

1242 斐波那契数列的第N项

标签:code   ++   矩阵   online   斐波那契   htm   tor   pac   black   

原文地址:https://www.cnblogs.com/zllwxm123/p/9537247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!