行列式学习笔记(二)
上次介绍了行列式的基本性质,我们继续探索由性质得出的有用结论(以二阶行列式为基准)。
结论一#
如果行列式两行相同,则行列式的值是
证明:
结论二#
如果有一行是
证明:
我们假设第一行是
结论三#
如果一行是另一行的
证明:
我们假设第一行是第二行的
由结论一可知:
结论四#
如果某一行是其他行的线性组合,行列式的值是
证明:
计算行列式#
先来介绍一个很好的性质。
一个行列式的一行加(减)另一行的
倍,行列式的值不变。
用数学公式表达:
证明一下:
直接对行列式进行
之后矩阵变成这样的一个存在,也就是对角矩阵。
考虑对角矩阵的行列式求法。
进一步的,我们推广到上三角矩阵以及下三角矩阵
发现这样的情况:
我们定义对角线的值为
。
那么,行列式的值都是
所以不需要
Code#
#include <bits/stdc++.h>
#define file(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)
#define quad putchar(' ')
#define Enter putchar('\n')
#define int long long
#define N 605
int n, mod, a[N][N], flag = 1;
signed main(void) {
// file("P7112");
std::cin >> n >> mod;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%lld", &a[i][j]);
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
while (a[i][i]) {
int x = a[j][i] / a[i][i];
for (int k = i; k <= n; k++)
a[j][k] = (a[j][k] - x * a[i][k] % mod + mod) % mod;
std::swap(a[j], a[i]);
flag *= (-1);
}a
std::swap(a[i], a[j]);
flag *= -1;
}
}
int ans = 1;
for (int i = 1; i <= n; i++)
ans = (ans * a[i][i]) % mod;
std::cout << (ans * flag + mod) % mod<< std::endl;
}
作者:Aonynation
出处:https://www.cnblogs.com/Oier-GGG/p/16105177.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通