解決
この質問は、整数を必要とするだけでなく、剰余に
最後に自然に上記の記事によれば、 - 行(列)のマトリクスに加え、別の行(列)のk倍が、行列式の値が変更されていない場合。
私たちは、ユークリッドのアルゴリズムを使用することができます
GCDをAB *(a / b)の重量%bを求める方法
コード
書式#include <cstdioを> する#include <cstdlib> 書式#include <アルゴリズム> に#define LL長い長い 使って 名前空間はstdを、 CONST INT N = 100 。 LL [N] [N]、P = 1E9。 整数N、M、ID [N] [N]、CNT。 チャーS [N]、[N]。 無効アドオン(int型のu、int型V) { [U] [U] ++、[V] [V] ++、[U] [V] - [V] [U] - 。 } 空解決(int型のn) { LL ANS = 1 。 以下のために(INT iが= 1 ; I <= N; I ++ ) { 用(int型 K = I + 1、K <= N; K ++ ) 一方、([K] [i])と { LL率 = [I] [I] / [K] [i]は、 用(INT J = 1 ; J <= nであり、j ++)[I] [J] =([I] [J] -rate * [K] [j]は%P + P)%のP。 スワップ([I]、[K])、ANS = - ANS。 } 年 =年* [i]は[I]%のP; } printf(" %のLLD \ n "、(ANS + P)%のP)。 } int型のmain() { scanf関数(" %D%D "、&N、&M)。 以下のために(INT iが= 1 ; I <= N; I ++ ) { scanf関数(" %S "、S [I] + 1 )。 用(INT J = 1 ; J <= Mであり、j ++ ) 場合(S [I] [J] == ' ')ID [I] [J] = ++ CNT。 } 以下のために(INT iが= 1 ; I <= N; I ++ ) のための(INT J = 1 ; J <= Mであり、j ++ ) { もし(S [i]の[J] =!' ')続けます。 もし(ID [I + 1 ] [J])を追加し(ID [I] [J]、ID [I + 1 ] [J])。 もし(ID [I] [J + 1 ])を追加(ID [I] [J]、ID [I] [J + 1 ])。 } (CNT解く - 1 )。 リターン 0 ; }