java 矩阵运算模板(加法,乘法,幂乘)

public class Matrix {
	int col,row,mod;
	int [][]m;
	Matrix(int r,int c,int _m){
		this.col = c;
		this.row = r;
		this.mod = _m;
		m = new int[row][];
		for(int i=0;i<row;i++) {
			m[i] = new int[col];
		}
		for(int i=0;i<row;i++) {
			for(int j=0;j<col;j++) {
				m[i][j] = 0;
			}
		}
	}
	Matrix(Matrix val){
		this.col = val.col;
		this.row = val.row;
		this.mod = val.mod;
		m = new int[row][];
		for(int i=0;i<row;i++) {
			m[i] = new int[col];
		}
		for(int i=0;i<row;i++) {
			for(int j=0;j<col;j++) {
				m[i][j] = 0;
			}
		}
	}
	void delMatrix() {
		m = null;
	}
	Matrix Matrxadd(Matrix rht) {
		Matrix temp=new Matrix(row, col, mod);
	    for(int i = 0; i < row; i++){
	        for(int j = 0; j < col; j++){
	            temp.m[i][j] = (m[i][j] + rht.m[i][j])%mod;
	        }
	    }
	    return temp;
	}
	Matrix Matrixmul(Matrix rht) {
		Matrix temp=new Matrix(row, rht.col, mod);
	    for(int i = 0; i < row; i++){
	        for(int k = 0; k < rht.row; k++){
	            for(int j = 0; j < rht.col; j++){
	                temp.m[i][j] = (temp.m[i][j] + m[i][k]*rht.m[k][j])%mod;
	            }
	        }
	    }
	    return temp;
	}
	//static 不要轻易改动,如果运行不过,可以吧static 改成public 或者直接删除
	Matrix Matrixpow(Matrix _m,int n) {
		Matrix a=new Matrix(_m), res = new Matrix(_m.row, _m.col, _m.mod);
	    for(int i = 0; i < _m.row; i++){
	        res.m[i][i] = 1;
	    }
	    while(n > 0){
	        if(n%2==1) res = res.Matrixmul(a);
	        a = a.Matrixmul(a);
	        n >>= 1;
	    }
	    return res;
	}
	public static void main(String args[]) {
		Matrix a = new Matrix(2,2,2);
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35821988/article/details/79902333
今日推荐