模板矩阵加速(数列)

Posted jian-song

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板矩阵加速(数列)相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
#define ll long long
#define For(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
int T,n;
const int p=1e9+7;
struct mat
    ll m[5][5];
ans,base;
inline mat mul(mat a,mat b)//等我学会重载运算符我就来改!quq 
    mat res;
    memset(res.m,0,sizeof(res.m));
    For(i,1,3)
        For(j,1,3)
            For(k,1,3)
                res.m[i][j]+=(a.m[i][k]%p)*(b.m[k][j]%p);
                res.m[i][j]%=p;
            
        
    
    return res;

inline void sets()
    memset(ans.m,0,sizeof(ans.m));
    For(i,1,3) ans.m[i][i]=1;
    memset(base.m,0,sizeof(base.m));
    base.m[1][1]=base.m[1][3]=base.m[2][1]=base.m[3][2]=1;

inline void matksm()
    while(n)
        if(n&1) ans=mul(ans,base);
        base=mul(base,base);
        n>>=1;
    

int main()
    scanf("%d",&T);
    while(T--)
        scanf("%d",&n);
        if(n<=3)printf("1\n");continue;
        sets();
        matksm();
        printf("%lld\n",ans.m[2][1]);
    
    return 0;
 

 

以上是关于模板矩阵加速(数列)的主要内容,如果未能解决你的问题,请参考以下文章

P1939 模板矩阵加速(数列)

Luogu P1939 模板矩阵加速(数列)

模板矩阵加速(数列)

模板矩阵加速(数列)

luogu 1939 模板矩阵加速(数列)

[洛谷P1939]模板矩阵加速(数列)