zoukankan      html  css  js  c++  java
  • 矩阵快速幂

    在讲矩阵快速幂之前,要说清楚矩阵乘法是什么。

    矩阵乘法,用来干什么,我这个小蒟蒻并不知道。

    但是,有大佬对于他的作用可能有着自己的理解

    【看大佬blog】

    我这里找的题目是洛谷3390 矩阵快速幂的模板

    方法和整数的快速幂是一样的

    自己重载一下乘号即可

    顺带推荐一个大佬对于矩阵快速幂的理解(%%%songyuchen大佬)
    %%%大佬

    已经有大佬对于矩阵乘法的方法的讲解了,我就不再多说
    直接贴一下矩阵快速幂的代码

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    #define MAX 101
    #define MOD (1000000007)
    long long n,k;
    struct yl//矩阵 
    {
    	   int n;//大小
    	   long long g[MAX][MAX];  
    };
    yl operator*(yl a,yl b)//定义乘法 
    {
    	   int n=a.n;
    	   yl cool;
    	   memset(cool.g,0,sizeof(cool.g));
    	   for(int i=1;i<=n;++i)
    	   	    for(int j=1;j<=n;++j)
    				 for(int k=1;k<=n;++k)
    				        cool.g[i][j]=(cool.g[i][j]+1ll*a.g[i][k]*b.g[k][j]%MOD)%MOD;
    	   cool.n=n;
    	   return cool;
    }
    void write(yl a)
    {
    	   int n=a.n;
    	   for(int i=1;i<=n;++i)
    	   {
    	       for(int j=1;j<=n;++j)
    		      cout<<a.g[i][j]<<' ';
    		   cout<<endl;
    	   }
    }
    yl Pow(yl a,long long b)//a的b次方
    {
    	   if(b==1)return a;
    	   yl s=Pow(a,b/2);
    	   s.n=a.n;
    	   s=s*s;
    	   if(b&1)s=s*a;
    	   return s;
    }
    
    int main()
    {   
           cin>>n>>k;
           yl Six;
           Six.n=n;
           for(int i=1;i<=n;++i)
              for(int j=1;j<=n;++j)
                 cin>>Six.g[i][j];
           write(Pow(Six,k));
    	   return 0;
    }
    
  • 相关阅读:
    配置JDK环境变量
    yum 卸载安装的软件包及依赖
    常用命令--patch
    Git 源码编译安装
    基础Git命令
    下载资源的一些方法
    Python/Jupyter小技巧
    欺诈类Kaggle竞赛赛题描述
    工作小笔记
    进入互联网数据分析岗位需要明白的一些事
  • 原文地址:https://www.cnblogs.com/cjyyb/p/7196320.html
Copyright © 2011-2022 走看看