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

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int mod=1000000007;
    int n;
    long long k;
    long long read(){
        long long x=0;
        int f=1;
        char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1;
            c=getchar();
        }
        while(isdigit(c)){
            x=(x<<3)+(x<<1)+(c^48);
            c=getchar();
        }
        return x*f;
    }
    struct cube{
        long long a[105][105];
        cube(){
            memset(a,0,sizeof(a));
        }
        inline void build(){
            for(int i=1;i<=n;i++)
                a[i][i]=1;
        }
    }A;
    cube operator*(const cube &l,const cube &r){
        cube c;
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    c.a[i][j]+=((l.a[i][k]%mod)*(r.a[k][j]%mod))%mod;
                    c.a[i][j]%=mod;
                }
            }
        }
        return c;
    }
    int main(){
        n=read();
        k=read();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                A.a[i][j]=read();
        cube ans;
        ans.build();
        
        while(k){
            if(k&1) ans=ans*A;
            A=A*A;
            k>>=1;
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++)
                printf("%lld ",ans.a[i][j]);
            puts("");
        }return 0;
    }

     主要就是关于重载运算符的问题,矩阵快速幂的思想等同于普通快速幂的思想,但矩阵乘法的“K”要放在两层循环外

  • 相关阅读:
    jq function return value
    danci4
    danci3
    danci2
    项目总结 和语言总结。
    vm 安装 ox 10.13
    ios 异步和多线程
    ios 语法问题 全局变量。
    mvc
    object-c 之autolayout
  • 原文地址:https://www.cnblogs.com/648-233/p/11004358.html
Copyright © 2011-2022 走看看