Fibonacci
矩阵乘和快速幂
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MOD = 10000;
struct Matrix {
int m[2][2];
Matrix() {
memset(m, 0, sizeof(m));
}
Matrix operator *(Matrix a) {
Matrix res;
for (int i = 0; i <= 1; i++) {
for (int j = 0; j <= 1; j++) {
for (int k = 0; k <= 1; k++) {
res.m[i][j] =((m[i][k] * a.m[k][j])%MOD+res.m[i][j])%MOD;
}
}
}
return res;
}
};
int pow(Matrix a, int n) {
Matrix ans;
for (int i = 0; i <= 1; i++) {
ans.m[i][i] = 1;
}
while (n != 0) {
if (n % 2 == 1) {
ans=ans* a;
}
a = a * a;
n /= 2;
}
return ans.m[0][1];
}
int main()
{
long long n;
while (cin>>n&&(n!=-1)) {
Matrix a;
a.m[0][0] = 1;
a.m[0][1] = 1;
a.m[1][0] = 1;
a.m[1][1] = 0;
int x = pow(a, n);
cout << x << endl;
}
return 0;
}