hdu 1021 矩阵快速幂

来源:互联网 发布:知之一字众妙之门 编辑:程序博客网 时间:2024/05/22 01:43
#include<cstdio>#include<iostream>#include<cstdlib>#include<cstring>#define LL long long#define MOD 3using namespace std;typedef struct{LL z[2][2];}matrix;matrix addmatrix(matrix a,matrix b){matrix x;memset(x.z,0,sizeof(x.z));for(int i=0;i<2;i++){for(int j=0;j<2;j++){x.z[i][j]+=a.z[i][j]+b.z[i][j];//x.z[i][j]%=MOD;}}return x;}matrix mulmatrix(matrix a,matrix b){matrix x;memset(x.z,0,sizeof(x.z));for(int i=0;i<2;i++){for(int j=0;j<2;j++){for(int k=0;k<2;k++){x.z[i][j]+=a.z[i][k]*b.z[k][j];x.z[i][j]%=MOD;}}}return x;}matrix powmatrix(matrix a,LL n){matrix x;memset(x.z,0,sizeof(x.z));for(int i=0;i<2;i++){x.z[i][i]=1;}while(n!=0){if(n&1){x=mulmatrix(x,a);}a=mulmatrix(a,a);n/=2;}return x;}int main(){int n;while(cin>>n){matrix a,b,res;a.z[0][0]=1;a.z[0][1]=1;a.z[1][0]=1;a.z[1][1]=0;b.z[0][0]=11;b.z[0][1]=0;b.z[1][0]=7;b.z[1][1]=0;if(n!=0){res=powmatrix(a,n-1);res=mulmatrix(res,b);//cout << res.z[0][0] << endl;if(res.z[0][0]%3==0)cout << "yes\n";elsecout << "no\n";}elsecout << "no\n";}}

原创粉丝点击