矩阵乘法+快速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(){ }