当前位置:编程学习 > 网站相关 >>

密码学中矩阵相关计算

  1 /**
  2  *矩阵计算类
  3  */
  4 class Matrix{
  5    
  6     /*
  7      * 根据字符串解析密钥矩阵
  8      * param key 密钥
  9      * param rank 密钥矩阵的阶
 10      * return 返回密钥矩阵
 11 */
 12     public static int[][] getKeyMatrix(String key,int rank){
 13         key=key.trim();
 14         String[] akey=key.split(" ");
 15         int key_len=akey.length;
 16         int[][] pk=new int[rank][rank];            //密钥矩阵
 17    
 18         for(int i=0;i<key_len;i++){
 19             String num=akey[i];         
 20             int row=i/rank,col=i%rank;
 21             pk[row][col]=num.charAt(0)-'0';     //初始化第一位
 22             for(int j=1;j<num.length();j++){
 23                 pk[row][col]=pk[row][col]*10+num.charAt(j)-'0';
 24             }
 25         }
 26         return pk;
 27     }
 28    
 29     /* 矩阵a、b相乘,返回矩阵c */
 30     public static int[][] Multi(int[][] a,int[][] b){
 31         int row=a.length,
 32             col=b[0].length,
 33             rank=b.length;
 34         int[][] c=new int[row][col];
 35    
 36         for(int i=0;i<row;i++){
 37             for(int j=0;j<col;j++){
 38                 c[i][j]=0;
 39                 for(int k=0;k<rank;k++){
 40                     c[i][j]+=a[i][k]*b[k][j];
 41                 }
 42                 c[i][j]%=modular;
 43             }
 44         }
 45         return c;
 46     }
 47    
 48     /*
 49      * 计算行列式的值
 50      * param n 矩阵的阶
 51      * param N 矩阵
 52 */
 53     public static int Det(int n,int[][] matrix) {
 54         if (n == 1) {
 55             return matrix[0][0];
 56         }
 57         int[][] matrix2 = new int[n - 1][n - 1];
 58         int result = 0;
 59         for (int i = 0; i < n; i++) {            // 去除第0行第i列
 60             for (int j = 0; j < n-1; j++) {     
 61                 for (int p = 0; p < i; p++) {    // 上移一行
 62                     matrix2[j][p] = matrix[j + 1][p];
 63                 }
 64                 for (int q = i + 1; q < n; q++) { //右下往左上移
 65                     matrix2[j][q - 1] = matrix[j + 1][q];
 66                 }
 67             }
 68             result = result + (int) Math.pow(-1, i + 1) * matrix[0][i] 
 69                     * Det(n - 1, matrix2);
 70         }
 71         return result;
 72     }
 73    
 74     /*转置矩阵*/
 75     public static int[][] tranMatrix(int n,int[][] matrix){
 76         for(int i=0;i<n;i++)
 77             for(int j=i+1;j<n;j++){
 78                 int tmp=matrix[i][j];
 79                 matrix[i][j]=matrix[j][i];
 80                 matrix[j][i]=tmp;
 81             }
 82         return matrix;
 83     }
 84    
 85     /*代数余子式*/
 86     public static int getAdjunct(int n,int[][] matrix,int r,int c){
 87         int[][] matrix2 = new int[n - 1][n - 1];
 88         int result=0;
 89         for(int i=0;i<r;i++){   &nbs

补充:综合编程 , 安全编程 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,