本题是一道矩阵快速幂的入门题,提示里面已经给出了矩阵的构造,所以直接快速幂求解即可
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <stack>
#include <set>
#include <map>
using namespace std;
const int MAXN = 2;
const int mod = 10000;
struct Matrix
{
__int64 a[MAXN][MAXN];
int r;//行数
int c;//列数
};
void init(Matrix &mat, __int64 n)
{
for (int i = 0;i < mat.r;i++)
{
for (int j = 0;j < mat.c;j++)
{
mat.a[i][j] = n;
}
}
}
Matrix mul(Matrix mat1, Matrix mat2)
{
Matrix res;
res.c = mat2.c;
res.r = mat1.r;
init(res, 0);
for (int i = 0;i < mat1.r;i++)
{
for (int j = 0;j < mat2.c;j++)
{
for (int k = 0;k < mat1.c;k++)
{
res.a[i][j] += mat1.a[i][k] * mat2.a[k][j];
res.a[i][j] %= mod;
}
}
}
return res;
}
__int64 fmp(__int64 n)
{
Matrix ans;
ans.c = 2;
ans.r = 2;
ans.a[0][0] = ans.a[0][1] = ans.a[1][0] = 1;
ans.a[1][1] = 0;
Matrix base = ans;
while (n)
{
if (n & 1) ans = mul(ans, base);
base = mul(base, base);
n >>= 1;
}
return ans.a[1][1];
}
int main()
{
__int64 n;
while (cin >> n&&n!=-1)
{
cout << fmp(n) << endl;
}
return 0;
}