首页 > 其他 > 详细

矩阵快速幂基础

时间:2020-04-17 16:31:41      阅读:50      评论:0      收藏:0      [点我收藏+]

这里放一下矩阵快速幂的模板.

首先我们怎样记得转移矩阵的行列数呢,我么用手比划一下,先横,再竖着.为答案矩阵的一个元素,

所以第一个矩阵的列数与转移矩阵的横数相等,转移矩阵的列数与答案矩阵的列数相等...

205. 斐波那契

技术分享图片
    #include<bits/stdc++.h>
    #define db double
    #define ll long long
    #define reg register
    #define pb(x) push_back(x)
    #define fup(i,x,y) for(reg int i=x;i<=y;++i)
    #define fdw(i,x,y) for(reg int i=x;i>=y;--i)
    using namespace std;
    const int mod=10000;
    int n;
    struct wy
    {
        ll a[5][5];
        wy(){memset(a,0,sizeof(a));}
        inline void clear ()
        {
            memset(a,0,sizeof(a));
        }
        wy friend operator *(wy a,wy b) 
        {
            wy c;
            fup(i,1,2) fup(j,1,2) fup(k,1,2) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
            return c;
        }
        wy friend operator ^(wy a,ll y)
        {
            wy c;
            fup(i,1,2) c.a[i][i]=1;
            while(y)
            {
                if(y&1) c=c*a;
                y>>=1;
                a=a*a;
             }
             return c;
        } 
    }A,B,C;
    inline int read()
    {
        int x=0,ff=1;
        char ch=getchar();
        while(!isdigit(ch)) {if(ch==-) ff=-1;ch=getchar();}
        while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
        return x*ff;
    }
    int main()
    {
        freopen("1.in","r",stdin);
        B.a[1][1]=0;B.a[1][2]=1;
        B.a[2][1]=1;B.a[2][2]=1;
        while(1)
        {
            n=read();
            if(n==-1) break;
            if(n<=2) 
            {
                if(n==0) puts("0");
                else puts("1");
                continue;
            }
            A.clear();
            A.a[1][1]=1;A.a[1][2]=1;
            C=B^(n-2);
            A=A*C;
            printf("%lld\n",A.a[1][2]);
        }
        return 0;
    }
    
View Code

 

矩阵快速幂基础

原文:https://www.cnblogs.com/gcfer/p/12720606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!