您的位置:首页 > 其它

POJ 3070 Fibonacci 矩阵快速幂

2017-09-10 11:28 302 查看
原题链接

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm poj