行列式求值

var a:array[0..208,0..208] of int64;
    mo:int64;
    i,j,n,temp:longint;
function guess:int64;
var i,j,k,t:longint;
    ans:int64;
begin
    ans:=1;
    for i:=1 to n do
    begin
        for j:=i+1 to n do
        begin
            while a[j,i]<>0 do
            begin
                t:=a[i,i] div a[j,i];
                for k:=i to n do begin a[i,k]:=a[i,k]-t*a[j,k]; a[i,k]:=a[i,k] mod mo; end;
                for k:=1 to n do begin temp:=a[i,k]; a[i,k]:=a[j,k]; a[j,k]:=temp; end;
                ans:=-ans;
            end;
        end;
        if a[i,i]=0 then exit(0);
        ans:=ans*a[i,i] mod mo;
    end;
    if ans<0 then ans:=ans+mo;
    exit(ans);

end;
begin
    readln(n,mo);
    for i:=1 to n do
        for j:=1 to n do
            read(a[i,j]);
    writeln(guess);
end.
      
时间: 2024-10-10 06:36:18

行列式求值的相关文章

uva 684 - Integral Determinant(行列式求值)

题目连接:uva 684 - Integral Determinant 题目大意:给定一个行列式,求行列式的值. 解题思路:将行列式转化成上三角的形式,值即为对角线上元素的积.因为要消元,又是整数,所以用分数去写了. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long type; struct Fraction { type me

行列式求值 (取模)

typedef __int64 lld; lld a[205][205]; int sign; lld N,MOD; void solved() { lld ans=1; for(int i=0;i<N;i++)//当前行 { for(int j=i+1;j<N;j++)//当前之后的每一行,因为每一行的当前第一个数要转化成0(想想线性代数中行列式的计算) { int x=i,y=j; while(a[y][i])//利用gcd的方法,不停地进行辗转相除 { lld t=a[x][i]/a[y

利用递归与行列式展开定理求行列式的值(数组指针版)

今天用数组指针改写了一下行列式求值程序,代码: 1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int main() 5 { 6 int rank; 7 void setDet(double*,int); 8 double valDet(double*,int); 9 cout<<"输入行列式的阶数:"; 10 cin>>rank; 11 double *

求行列式的值(递归)

/* #include <math.h> #include <stdio.h> #define N 100 #define LIM -100000000 float det(float a[N][N],int n){ if(n==1) return a[0][0]; if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];// the base situation else{ int j,i,flag=1; float ret=0; for(

老笔记整理五:C实现10阶内通过展开代数余子式求行列式的值

这个分为两部分,先是写出了C实现计算三阶行列式,然后过了一段时间突然有了思路才写下了10阶内这段代码.真怀念那段写代码的日子. 一:C实现计算三阶行列式 最近高数课在上线性代数,二阶的还能口算,三阶的有点麻烦,想陆陆续续地把公式都用C来实现.因为二阶的行列式如果用C来写就是一句话:val=det[0][0]*det[1][1]-det[0][1]*det[1][0];太简单了这里就不写了,主要写关于三阶的.只要把这个三阶行列式里每一个元素打进去就能算出值来了.过两天再写余子式的展开. 1 #in

C语言求行列式的值

#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <windows.h> #define NUM 3 int Fun(int n, int a[NUM][NUM]); /*函数声明*/ int main() { int i = 0, j = 0; /*i,j分别表示行与列*/ int a[3][3] = { {14,6,2},{6,3,3},{5,9,8} }; /

Herding(hdu4709)三点运用行列式求面积

Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1553 Accepted Submission(s): 440 Problem Description Little John is herding his father's cattles. As a lazy boy, he cannot tolerate chasing t

MATLAB矩阵——2.3矩阵求值

方阵的行列式 把一个方阵看作一个行列式,并对其按照行列式的规则求值,这个值就称为方阵所对应的行列式的值 函数det(A)求方阵A对应的行列式的值 矩阵的秩 rank(A),求矩阵A的秩 矩阵的迹 trace(A),求矩阵A的迹 也可以用sum(diag(A)),先提取对角线再求和 原文地址:https://www.cnblogs.com/Tea1024/p/9126029.html

表达式求值(from leetcode 241)

给定一个正确的表达式(不用担心不规范的输入),比如2-1-1, 通过在不同位置添加左右括号,改变求值的优先级顺序,求出所有的这些值: Example 1 Input: "2-1-1". ((2-1)-1) = 0 (2-(1-1)) = 2 Output: [0, 2] Example 2 Input: "2*3-4*5" (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)