1242 斐波那契数列的第N项

Posted zllwxm123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1242 斐波那契数列的第N项相关的知识,希望对你有一定的参考价值。

基准时间限制: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项的主要内容,如果未能解决你的问题,请参考以下文章

51Nod——T 1242 斐波那契数列的第N项

51Nod - 1242 斐波那契数列的第N项

(矩阵快速幂)51NOD 1242斐波那契数列的第N项

斐波那契数列的第N项

用递归法计算斐波那契数列的第n项

编写一递归函数求斐波那契数列的前40项