之前就听过这个东西
但是一直没遇到这个类型的题目
这道题就是典型的矩阵快速幂模板题了
根据斐波那契数列的性质以及矩阵快速幂的做法
可知:
0ms代码如下:
#include <cstdio>
#include <cstring>
#define M 10000
using namespace std;
struct Matrix {
int matrix[2][2];
Matrix operator * (const Matrix &m) {
Matrix ans = {0, 0, 0, 0};
for(int i=0; i<2; ++i) {
for(int k=0; k<2; ++k) {
if(matrix[i][k] > 0) {
for(int j=0; j<2; ++j)
ans.matrix[i][j] += matrix[i][k]*m.matrix[k][j]%M;
}
}
}
return ans;
}
}unit = {1, 0, 0, 1};
Matrix pow(Matrix a, int n) {
Matrix p = a, ans = unit;
while(n) {
if(n & 1)
ans = ans*p;
p = p*p;
n >>= 1;
}
return ans;
}
int main(void) {
int n;
while(scanf("%d", &n) && n!=-1) {
Matrix tmp = {1, 1, 1, 0};
Matrix ans = pow(tmp, n);
printf("%d\n", ans.matrix[0][1]%M);
}
return 0;
}