POJ 3070 Fibonacci 矩阵快速幂

来源:互联网 发布:html5单页面静态源码 编辑:程序博客网 时间:2024/06/03 12:05

原题链接


#include <iostream>#include <string.h>using namespace std;const int mod=1e4;int n;struct Mat{    int mat[2][2];    Mat(){memset(mat,0,sizeof(mat));}    Mat operator *(Mat a){        Mat b=Mat();        for(int i=0;i<2;i++)            for(int j=0;j<2;j++)            for(int k=0;k<2;k++)            b.mat[i][j]=(b.mat[i][j]+(mat[i][k]*a.mat[k][j]))%mod;        return b;    }    Mat operator ^(int k){        Mat e=Mat();        for(int i=0;i<2;i++) e.mat[i][i]=1;        Mat p=e,q=*this;        while(k){            if(k&1) p=p*q;            k>>=1;q=q*q;        }        return p;    }};int main(){    Mat base=Mat();    base.mat[0][0]=base.mat[1][0]=base.mat[0][1]=1;    while(cin>>n){        if(n==-1) break;        if(n==0){cout<<0<<endl;continue;}        Mat m=base^n;        cout<<m.mat[0][1]<<endl;    }    return 0;}


原创粉丝点击