UVA - 11542(求模2剩余系的矩阵的秩)

由于本题的所有数的素数分解都比500小,可以用每个数的素数拆分后对应前五百素数的个数(个数记为m),组成矩阵中的一列共n列(每个素数的个数模2,因为最终结果要求所选元素乘积的值对应每个素数的的个数都应该是偶数),那么解向量是一个有01构成的(每个01代表对应的元素选与不选),右乘上述矩阵没使得结果为一个0(由个m零构成)列向量。

那么只需求m*n矩阵的秩,那么便可以知道自由变元的个数x,解就是2^x-1

下面为求解矩阵的秩的代码(在模2剩余系下)

const int N = 510;
typedef int matrix[N][N];
void inline Swap(matrix& A,int n,int i,int j){
   rep(k,n) swap(A[i][k],A[j][k]);
}
int rank(matrix& A,int m,int n){
   int lim=min(m,n);
   int i=0,j=0;
   while(i<m&&j<n){
      int r=i;
      for(int k=i;k<m;k++) if(A[k][j]){r=k; break;}
      if(A[r][j]){
         Swap(A,n,r,i);
         for(int k=i+1;k<m;k++) if(A[k][j])
            for(int l=j;l<n;l++) A[k][l]^=A[i][l];
         i++;
      }
      j++;
   }
   return i;
}

在说明一点,再求矩阵值的过程中不需要用增光矩阵,而是用系数矩阵就可以了。因为并不求解方程,而只是求解矩阵的秩。

该方法是化矩阵为阶梯形矩阵(

 (1) 若矩阵A有零行,则零行在非零行下方。

(2)各非零行的左起第一个元素的列序数从上到下严格递增。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值