poj3070 单位矩阵(转移矩阵构造)+矩阵快速幂

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3070 单位矩阵(转移矩阵构造)+矩阵快速幂相关的知识,希望对你有一定的参考价值。

太妙了。。通过矩阵乘法来加速递推

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define mod 10000
int n;
void mul(int f[],int a[2][2]){//一维数组和矩阵相乘 
    int c[2]={};
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            c[j]=(c[j]+(long long)f[i]*a[i][j])%mod;
    memcpy(f,c,sizeof c);
}
void mulself(int a[2][2]){//矩阵自乘 
    int c[2][2]={};
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
                c[i][j]=(c[i][j]+(long long)a[i][k]*a[k][j])%mod; 
    memcpy(a,c,sizeof c);
}

int main(){
    while(cin>>n && n>=0){
        int f[2]={0,1},a[2][2]={{0,1},{1,1}};
        while(n){
            if(n%2)mul(f,a);
            mulself(a);
            n>>=1;
        }
        cout<<f[0]<<endl;
    }    
}
/*
1 1 2 3 5 8 13 21 34
*/

 

以上是关于poj3070 单位矩阵(转移矩阵构造)+矩阵快速幂的主要内容,如果未能解决你的问题,请参考以下文章

poj3070Fibonacci 矩阵快速幂

POJ 3070 矩阵快速幂

poj 3070 矩阵快速幂

Fibonacci--poj3070(矩阵快速幂)

POJ3070 矩阵快速幂模板

POJ 3070 矩阵快速幂解决fib问题