java实现矩阵快速幂算法

在网上看到了很多关于矩阵快速幂算法的文章,但好像没有找到完整代码的   有也不是java而是c c++的。自己整理了一下,用java把程序写了出来。

对这个也不算精通吧 也是本着学习的目的,如果有错误,欢迎指正。

原本打算建一个矩阵类的,后来想了想直接就用数组吧   其实核心代码就那几句 也是从网上查阅到的   就是 java 不像c一样 可以把int类型数据直接进行逻辑判断  好像代码中也就这点需要改动   里面涉及到了’与‘运算和移位运算  大家可以多想想 挺有意思的。

//矩阵快速幂
public class MatricQuickPower {
	public static int[][] multiply(int [][]a,int[][]b){
		int[][]arr=new int[a.length][b[0].length];
		for(int i=0;i<a.length;i++){
	       for(int j=0;j<b[0].length;j++){
               for(int k=0;k<a[0].length;k++){
                   arr[i][j]+=a[i][k]*b[k][j];
               }
	       }
        }
		return arr;
	}
	public static int[][] multiplyPower(int[][]a,int n){
		int[][] res=new int[a.length][a[0].length];
		for(int i=0;i<res.length;i++){
			for(int j=0;j<res[0].length;j++){
				if(i==j)
					res[i][j]=1;
				else
					res[i][j]=0;
			}
			
		}
		while(n!=0){
			if((n&1)==1)
                res=multiply(res,a);
            n>>=1;
			a=multiply(a,a);
		}
		return res;
	}
	public static void main(String[] args) {
		int [][]arr={{1,1,1},{1,1,1},{1,1,1}};
		int[][]arr1=multiplyPower(arr,3);
		for(int i=0;i<arr1.length;i++){
			for(int j=0;j<arr1[0].length;j++){
				System.out.print(arr1[i][j]+"   ");
			}
			System.out.println();
		}
	}
}





版权声明:本文为y937498174原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。