矩阵乘法+快速ni

矩阵乘法:A的行*B的列

小技巧 :

在用函数调用 矩阵的时候,直接 利用一个结构体去解决

#include <bits/stdc++.h>
using namespace std;
#define ri register int
#define M 1005
const int mod = 1e9+7;


struct node{
    int arr[M][M];
};

node xx(node a,node b)
{
    node t;
    for(ri i=1;i<=n;i++)
    {
        for(ri j=1;j<=n;j++)
        {
            t.arr[i][j]=0;
            for(ri k=1;k<=n;k++)
            {
                t.arr[i][j]=(t.arr[i][j]+a.arr[i][k]*b.arr[k][j]%mod)%mod;
            }
        }
    }
    return t;
}
long long xxx(node a,node b)
{
    node t;
    for(ri i=1;i<=1;i++)
    {
        for(ri j=1;j<=n;j++)
        {
            t.arr[i][j]=0;
            for(ri k=1;k<=n;k++)
            {
                t.arr[i][j]=(t.arr[i][j]+a.arr[i][k]*b.arr[k][j]%mod)%mod;
            }
        }
    }
}
node ksn(node a,int n)
{
    node t;
    for(ri i=1;i<=n;i++)
    {
        for(ri j=1;j<=n;j++)
        {
            if(i==j) t.arr[i][j]=1;
            else t.arr[i][j]=0;
        }
    }
    while(n)
    {
        if(n&1) t=xx(a,t);
        n>>=1;a=xx(a,a);
    }
    return t;
}
long long sql(long long a,int n)
{
    long long ans=1;
    while(n)
    {
        if(n&1) ans=ans*a%mod;
        a=a*a%mod;n>>=1;
    }
    return ans;
}

int main(){
    
    
    
    
    
}
View Code

 

posted @ 2021-11-11 19:51  VxiaohuanV  阅读(66)  评论(0编辑  收藏  举报