标签:相同 read clear https 重载 lin oid 关于 逆运算
关于矩阵:
\(1.\) 矩阵加法:直接对应位置加
\(2.\) 矩阵减法:直接对应位置减
\(3.\) 矩阵乘法:
这里要求相乘的 \(A\) 的行和 \(B\) 的列相同
这里矩阵乘法没有交换律
\(4.\) 快速幂
重载一下运算符,和普通快速幂一样写
\(5.\) 高斯消元
\(6.\) 矩阵求逆
定义:如果 \(A\times P \equiv e\ (mod \ p)\) 其中 \(A,P\) 为可矩阵乘矩阵,\(e\) 为单位矩阵
那么我们成矩阵\(P\) 为矩阵 \(A\) 在 \(mod \ p\) 意义下的逆元
求法:
博主只会高斯消元求的一种
先考虑整一个矩阵 \(B\) 放在 \(A\) 的右侧,同时对 \(A\) 进行高斯消元
消成上三角之后接着消成单位矩阵就好了
我们对 \(A\) 进行得操作对 \(B\) 进行一样的,然后就没问题了
最后得到的 \(B\) 就是 \(A\) 在\(mod \ p\) 意义下的逆
\(Code:\)
#include<bits/stdc++.h>
using namespace std;
namespace yspm{
inline int read()
{
int res=0,f=1; char k;
while(!isdigit(k=getchar())) if(k==‘-‘) f=-1;
while(isdigit(k)) res=res*10+k-‘0‘,k=getchar();
return res*f;
}
const int mod=1e9+7;
inline int ksm(int x,int y)
{
int res=1; for(;y;y>>=1,x=1ll*x*x%mod) if(y&1) res=res*1ll*x%mod;
return res;
}
const int N=510;
int n;
struct mat{
int a[N][N];
inline void clear(){memset(a,0,sizeof(a)); return ;}
inline void update(int id,int val)
{
for(int i=1;i<=n;++i) a[id][i]=a[id][i]*1ll*val%mod;
return ;
}
inline void ch(int x,int y,int val)
{
for(int i=1;i<=n;++i) a[x][i]=((a[x][i]+1ll*a[y][i]*val%mod)%mod+mod)%mod;
return ;
}
inline void swap(int x,int y){for(int i=1;i<=n;++i) swap(a[x][i],a[y][i]); return ;}
int* operator [](int x){return a[x];}
inline void print()
{
for(int i=1;i<=n;++i){for(int j=1;j<=n;++j) printf("%d ",a[i][j]); puts("");}
return ;
}
}A,B;
signed main()
{
n=read(); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) A[i][j]=read();
for(int i=1;i<=n;++i) B[i][i]=1;
for(int i=1;i<=n;++i)
{
if(!A[i][i])
{
for(int j=i+1;j<=n;++j) if(A[j][i]){ A.swap(i,j),B.swap(i,j); break;}
}
if(!A[i][i]) return puts("No Solution"),0;
int inv=ksm(A[i][i],mod-2); A.update(i,inv); B.update(i,inv);
for(int j=i+1;j<=n;++j) B.ch(j,i,-A[j][i]),A.ch(j,i,-A[j][i]);
}
for(int i=n-1;i>=1;--i) for(int j=i+1;j<=n;++j) B.ch(i,j,-A[i][j]),A.ch(i,j,-A[i][j]);
B.print();
return 0;
}
}
signed main(){return yspm::main();}
用途:我们在处理矩阵的逆运算的时候可以考虑求逆,比如把矩阵作为函数求其逆函数
标签:相同 read clear https 重载 lin oid 关于 逆运算
原文地址:https://www.cnblogs.com/yspm/p/12819335.html