POJ 3070 矩阵mob

.

矩阵高速幂想法与快速幂相同

#include<iostream>
#include<cstdio>
#include<cstring>
#define MOD 10000
using namespace std;
struct matrix {
    int mat[2][2];
    matrix() {      //构造函数与结构体同名 若写作init()函数 需调用 
        memset(mat,0,sizeof(mat));
    }
};

matrix mul(matrix A , matrix B) {
    matrix C;
    for(int i=0;i<=1;i++) {
        for(int j=0;j<=1;j++) {
            for(int k=0;k<=1;k++) {
                C.mat[i][j]=(C.mat[i][j]+A.mat[i][k]*B.mat[k][j])%MOD;
            }
        }
    }
    return C;
}

matrix powmul(matrix A ,int n) {
    matrix B;  //初始化为单位阵 
    B.mat[0][0]=1;
    B.mat[1][1]=1;
    while(n>=1) {
        if(n&1) {
            B=mul(B,A);
        }
        A=mul(A,A);    //自身幂次     
        n/=2;
    }
    return B;
}


int main()
{
    
    int n;
    while(~scanf("%d",&n))
    {
        if(n==-1) break;
        matrix A; 
        A.mat[0][0]=A.mat[0][1]=A.mat[1][0]=1;
        A.mat[1][1]=0;
        A=powmul(A,n);
        cout<<A.mat[0][1]<<endl;
    }
    
    return 0;    
} 

 

原文地址:https://www.cnblogs.com/LinesYao/p/5452036.html