链接:戳这里
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include <ctime> #include<queue> #include<set> #include<map> #include<stack> #include<iomanip> #include<cmath> #define mst(ss,b) memset((ss),(b),sizeof(ss)) #define maxn 0x3f3f3f3f #define MAX 1000100 ///#pragma comment(linker, "/STACK:102400000,102400000") typedef long long ll; typedef unsigned long long ull; #define INF (1ll<<60)-1 using namespace std; const ll mod=10000; ll n; struct Matrix{ ll ma[2][2]; Matrix(){ for(int i=0;i<2;i++) for(int j=0;j<2;j++) ma[i][j]=0; } }; Matrix Mult(Matrix a,Matrix b){ Matrix c; for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ for(int k=0;k<2;k++){ c.ma[i][j]=(c.ma[i][j]+a.ma[i][k]*b.ma[k][j]%mod)%mod; } } } return c; } Matrix MPow(Matrix a,ll b){ Matrix tmp; for(int i=0;i<2;i++) tmp.ma[i][i]=1; while(b){ if(b%2) tmp=Mult(tmp,a); a=Mult(a,a); b/=2; } return tmp; } int main(){ while(scanf("%I64d",&n)!=EOF){ if(n==-1) break; if(n==0){ cout<<0<<endl; continue; } Matrix a,b; a.ma[0][0]=1;a.ma[0][1]=1;a.ma[1][0]=1; b=MPow(a,n); printf("%I64d\n",b.ma[1][0]%mod); } return 0; }