初等变换求 |A| % Mod & A- % Mod & A* % Mod(模板)
// |A| * A- = A* (伴随矩阵) = 逆矩阵 * 矩阵的值 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
using namespace std; const int MAXN = ;
const int Mod = ;
int a[MAXN][MAXN], b[MAXN][MAXN]; int fast_pow(int a, int k){
int res = ;
while(k){
if(k & ) res = 1LL * res * a % Mod;
a = 1LL * a * a % Mod;
k >>= ;
}
return res;
} void solve(int n){
for(int i = ; i <= n; i++){
for(int j = ; j <= n; j++){
b[i][j] = (i==j);//初始 b 为单位矩阵
}
} int det = ;
for(int i = ; i <= n; i++){
int t = i;
for(int k = i; k <= n; k++){
if(a[k][i]) t = k;
} if(t != i) det *= -;
for(int j = ; j <= n; j++){
swap(a[i][j], a[t][j]);
swap(b[i][j], b[t][j]);
} det = 1LL * a[i][i] * det % Mod;
int inv = fast_pow(a[i][i], Mod-); // a[i][i] 的逆元 for(int j = ; j <= n; j++){
a[i][j] = 1LL * inv * a[i][j] % Mod;
b[i][j] = 1LL * inv * b[i][j] % Mod;
}
for(int k = ; k <= n; k++){
if(k == i) continue;
int tmp = a[k][i];
for(int j = ; j <= n; j++){
a[k][j] = (a[k][j] - 1LL * a[i][j] * tmp % Mod + Mod) % Mod;
b[k][j] = (b[k][j] - 1LL * b[i][j] * tmp % Mod + Mod) % Mod;
}
}
}
//经过增广矩阵初等变换,此时 b 为 a 的逆矩阵
det = (det + Mod) % Mod; // |a| % Mod
for(int i = ; i <= n; i++){
for(int j = ; j<= n; j++){
b[i][j] = 1LL * det * b[i][j] % Mod; // 将 b 由逆矩阵变成伴随矩阵
}
}
} int main(void){
int n;
while(scanf("%d",&n)!=EOF){
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
scanf("%d", &a[i][j]);
solve(n);
for(int i = ; i <= n; i++)
printf("%d%c",(i & ? b[i][] : (Mod - b[i][]) % Mod), " \n" [i == n]);
}
return ;
}
时间复杂度为 O(n^3)
初等变换求 |A| % Mod & A- % Mod & A* % Mod(模板)的更多相关文章
- n对mod求模整除时转化成mod的数学式
n对mod求模,它的值在0到mod-1之间,如果要求模整除的时候转化成mod可以用下面的式子: n = (n - 1 % mod + mod) % mod +1 这里先减一,模上mod再加一,这样如果 ...
- 求a^b的约数对mod取模
+; int prime[maxn]; void marktable(int n){ memset(prime,,sizeof(prime)); ;i<=n;i++){ ]]=i; ;j< ...
- HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)
最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文 ...
- bsgs+求数列通项——bzoj3122(进阶指南模板该进)
/* 已知递推数列 F[i]=a*F[i-1]+b (%c) 解方程F[x]=t an+1 = b*an + c an+1 + c/(b-1) = b(an + c/(b-1)) an+1 + c/( ...
- 850. Dijkstra求最短路 II(堆优化模板)
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行 ...
- 求第N个回文数 模板
备忘. /*看到n可以取到2*10^9.说明普通方法一个个暴力计算肯定会超时的,那打表呢?打表我们要先写个打表的代码,这里不提供.打完表观察数据,我们会发现数据其实是有规律的.完全不需要暴力的把所有数 ...
- HLG 1494网络 (求的割点数目)可做模板
网络 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 103(32 users) Total Accepted: 54(31 users ...
- manacher求最长回文子串算法模板
#include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...
随机推荐
- hdu 1503 Advanced Fruits(最长公共子序列)
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- json与jsonp详解
前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域 ...
- leetcode 204. Count Primes(线性筛素数)
Description: Count the number of prime numbers less than a non-negative number, n. 题解:就是线性筛素数的模板题. c ...
- git克隆某一个branch
git clone -b <branch> <remote_repo> 例如: git clone -b 指定的分支名字
- Uva10366
模拟乱搞 要说算法的话...乱搞算法? #include<iostream> #include<cstring> #include<algorithm> #incl ...
- vue 常见的新增、编辑、查看公用同一个页面
用vue开发经常会碰到,一个功能的新增.编辑.查看公用同一个页面,如果是页面暂且不提. 但是弹框,很多人会发现,如果是点击编辑,取消,再点新增,弹框上面是会有残留数据的,为什么会这样呢,因为在点编辑的 ...
- 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
------------------ 前言 ------------------ 发了第一篇文章后,有不少同志留言,看来socket编程仍然是软件系统里面一个比较难的部分. 第一篇文章主要介绍了传输协 ...
- powermock, 强力模拟
1. powermock是基于mockito或者easymock,TestNG之上的mock: 2. 提供了对于静态函数,私有函数的mock 3. 下载地址:https://github.com/po ...
- Poj 1887 Testing the CATCHER(LIS)
一.Description A military contractor for the Department of Defense has just completed a series of pre ...
- CentOS6和CentOS7服务开机启动
CentOS 6和CentOS 7都可以定义开机启动哪些服务,但CentOS 6的命令是chkconfig,CentOS 7是systemctl. 本文将介绍两种命令的实现方式. 一.CentOS 6 ...