File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed
Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change 758758&=\frac{\phi(x)x}{2}
759759\end{align}
760760$$
761+
762+ # gauss消元
763+
764+ # gauss消元模板
765+ # gauss_jordan对角消元
766+ ``` c++
767+ typedef double Matrix[maxn][maxn];
768+ int n;
769+ // 消元为对角阵
770+ void gauss_jordan (Matrix A,int n){
771+ //A增广矩阵,第n列是结果列
772+ for(int i=0 ; i<n ; ++i){
773+ int r = i;//元素最大列
774+ for(int j = i+1 ; j<n ; ++j)
775+ if(abs(A[ j] [ i ] ) > abs(A[ r] [ i ] ))r = j;
776+ if(abs(A[ r] [ i ] ) < eps)continue;
777+ if(r!=i)for(int j = 0 ; j<=n; ++j)swap(A[ r] [ j ] ,A[ i] [ j ] );//交换
778+ //与i行以外的所有行消元,化为阶梯阵,与gauss消元的不同
779+ for(int k=0 ; k<n ; ++k)
780+ if(k!=i)
781+ for(int j = n ; j>=i ; --j)A[ k] [ j ] -=A[ k] [ i ] /A[ i] [ i ] * A[ i] [ j ] ;//精度.
782+ }
783+ }
784+ ```
785+
786+ # 异或方程组消元求秩
787+
788+ ```c++
789+ int my_rank(Matrix &A, int m,int n){
790+ int i=0 ,j = 0,r;
791+ while (i<m && j < n) {
792+ int r =i ;
793+ for(int k =i ; k<m ; ++k)
794+ if(A[k][j]){r=k ; break;}
795+ if(A[r][j]){
796+ if(r != i)for(int k = 0 ; k<n ; ++k)swap(A[r][k],A[i][k]);
797+ for(int u= i+1 ; u<m ; ++u)
798+ if(A[u][j])
799+ for(int k = j ; k<n ; ++k)
800+ A[u][k] ^= A[i][k];
801+ ++i;
802+ }
803+ j++;
804+ }
805+ return i;
806+ }
807+ ```
You can’t perform that action at this time.
0 commit comments