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