矩阵快速幂模板
const ll MAXN = 2;//矩阵的阶
struct Matrix {
ll m[MAXN][MAXN];
Matrix() {
memset(m, 0, sizeof(m)); }
};
Matrix Multi(Matrix a,Matrix b) {
// 矩阵乘法
Matrix ans;
for (int i = 0; i < MAXN; ++i) {
for (int j = 0; j < MAXN; ++j) {
for (int k = 0; k < MAXN; ++k) {
ans.m[i][j] = (ans.m[i][j] + a.m[i][k] * b.m[k][j]) % MOD;
}
}
}
return ans;
}
Matrix fastm(Matrix a, ll n) {
Matrix ans;
for (int i = 0; i < MAXN; i++)ans.m[i][i] = 1;//初始化为单位矩阵
while (n > 0) {
if (n & 1)ans = Multi(ans, a);
a = Multi(a, a);
n >>= 1;
}
return ans;
}
题目
题目描述
在斐波那契数列中, F i b 0 = 0 , F i b 1 = 1 , F i b n = F i b n − 1 + F i b n − 2 ( n > 1 ) Fib_0=0,Fib_1=1,Fibn=Fib_{n−1}+Fib_{n−2}(n>1) Fib0=0,Fib1=1,Fibn=Fibn−1+Fi