zoukankan      html  css  js  c++  java
  • 模板——矩阵快速幂+矩阵乘法

    #include<bits/stdc++.h>
    using namespace std;
    const long long P=1e9+7;
    long long n,m;
    struct nob{
    	long long juzhen[105][105];
    	friend nob operator * (const nob &a,const nob &b){
    		nob c;
    		for (int i=1; i<=n; i++){
    			for (int l=1; l<=n; l++){
    				long long sum=0;
    				for (int k=1; k<=n; k++){
    					sum+=a.juzhen[i][k]*b.juzhen[k][l];
    					sum%=P;
    				}
    				c.juzhen[i][l]=sum;
    			}
    		}
    		return c;
    	}
    }s[100];
    nob resite(){
    	nob a;
    	for (int i=1; i<=n; i++){
    		for (int l=1; l<=n; l++){
    			if (i==l) a.juzhen[i][l]=1;
    			else a.juzhen[i][l]=0;
    		}
    	}
    	return a;
    }
    nob fastpow(nob x,long long k){
    	nob ans=resite();
    	while (k){
    		if (k&1) ans=x*ans;
    		x=x*x;
    		k>>=1;
    	}
    	return ans;
    }
    int main(){
    	cin>>n>>m;
    	for (int i=1; i<=n; i++){
    		for (int l=1; l<=n; l++){
    			cin>>s[1].juzhen[i][l];
    		}
    	}
    	s[2]=fastpow(s[1],m);
    	for (int i=1; i<=n; i++){
    		for (int l=1; l<=n; l++){
    			cout<<s[2].juzhen[i][l]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    感觉是一个极其丑陋而且比较慢的(应该吧,因为看起来比较慢)矩乘。QAQ

  • 相关阅读:
    repr() Vs str()
    默认参数
    元组
    字典
    电脑可以办的两类最基本的事情
    代码块
    变量名
    print的逻辑
    input的逻辑
    让python2听懂中文
  • 原文地址:https://www.cnblogs.com/cain-/p/7560529.html
Copyright © 2011-2022 走看看