矩阵快速幂求斐波那契

Posted accpted

tags:

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

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int p=10000;
 4 typedef long long ll;
 5 int n,m;
 6 
 7 struct node 
 8     ll a[2][2];
 9 
10     node operator*(const node &b) const 
11         node res;
12         for (int i = 0; i < 2; i++) 
13             for (int j = 0; j < 2; j++) 
14                 res.a[i][j] = 0;
15                 for (int k = 0; k < 2; k++) 
16                     res.a[i][j] = (res.a[i][j] + a[i][k] * b.a[k][j]) % m;
17                 
18             
19         
20         return res;
21     
22 ;
23 
24 node pow(node b,ll c) 
25     node res;
26     res.a[0][0] = 1;
27     res.a[1][0] = 0;
28     res.a[0][1] = 0;
29     res.a[1][1] = 1;
30     while (c) 
31         if (c & 1) 
32             res = res * b;
33         
34         c >>= 1;
35         b = b * b;
36     
37     return res;
38 
39 
40 int main() 
41     node f;
42     f.a[0][0] = 1;
43     f.a[1][0] = 1;
44     f.a[0][1] = 1;
45     f.a[1][1] = 0;
46     scanf("%d%d", &n, &m);
47         node ans = pow(f, n);
48         printf("%lld\n", ans.a[1][0]);
49 

 

以上是关于矩阵快速幂求斐波那契的主要内容,如果未能解决你的问题,请参考以下文章

快速求斐波那契数列(矩阵乘法+快速幂)

模板矩阵快速幂求第n项斐波那契

poj 3070 Fibonacci(矩阵快速幂求Fibonacci数列)

poj3070 求斐波那契数列第n项 ——矩阵快速幂

斐波那契矩阵快速幂模板斐波那契公约数

矩阵快速幂笔记