初等变换求 |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> ...
随机推荐
- Vue2.0总结———vue使用过程常见的一些问题
Vue目前的的开发模式主要有两种:1.直接页面级的开发,script直接引入Vue2.工程性开发,webpack+loader或者直接使用脚手架工具Vue-cli,里面的文件都配置好了 webpack ...
- leetcode 226. Invert Binary Tree(递归)
Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...
- C++11特性 gcc源码包
1.下载gcc最新的源码包 2.解压缩 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.运行download_prerequisites脚本, ./contri ...
- thinkphp中图片上传的几种好的办法
http://www.thinkphp.cn/code/701.html http://www.thinkphp.cn/code/151.html
- css 更换浏览器 默认图标
cursor:url("./images/test.cur"),auto; 只在chrome测试过...
- BZOJ1150:[CTSC2007]数据备份
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...
- office2016_windows永久激活查看方法
YC7N8-G7WR6-9WR4H-6Y2W4-KBT6X 首先要保证你安装了 百云址:http://pan.baidu.com/share/home?uk=4011207371 如果你是win8,w ...
- HDOJ1015(简单深搜)
Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【转】 Pro Android学习笔记(六二):Preferences(6):header
目录(?)[-] 代码实现 header xml文件 在前面的例子,我们主要学习了PreferenceScreen的xml如何写,preference有哪些类型.在代码中,我们为了不提示warning ...
- TModJS:template
ylbtech-TModJS: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech. ...