POJ 3070 矩阵快速幂

题意:
让你用矩阵来找Fibonacci数
思路:
不用矩阵快速幂会TLE,只能学一下啦
(其实也不难)

// by SiriusRen
#include <cstdio>
using namespace std;
struct matrix{
    int a[2][2];
    void init(){a[0][0]=a[1][0]=a[0][1]=1;a[1][1]=0;}
};
matrix multiplication(matrix a,matrix b){
    matrix c;
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++){
            c.a[i][j]=0;
            for(int k=0;k<2;k++)
                c.a[i][j]+=a.a[i][k]*b.a[k][j];
            c.a[i][j]%=10000;
        }
    return c;
}
void pow(int x){
    if(x==-1){puts("0");return;}
    matrix ans,s;ans.init();s.init();
    while(x>=1){
        if(x&1)ans=multiplication(ans,s);
        s=multiplication(s,s);
        x>>=1;
    }
    printf("%d
",ans.a[0][1]);
}
int main(){
    int k;
    while(scanf("%d",&k)&&k!=-1)pow(k-1);
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532392.html