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

    题目描述

    给定n*n的矩阵A,求A^k

    输入输出格式

    输入格式:
    第一行,n,k
    第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素

    输出格式:
    输出A^k
    共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7

    输入输出样例

    输入样例#1:
    2 1
    1 1
    1 1

    输出样例#1:
    1 1
    1 1

    这里写代码片
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define LL long long
    
    using namespace std;
    
    const LL mod=1000000007;
    const int N=201;
    LL k;
    int n;
    
    struct node{
        LL m[101][101];
        node operator * (const node &a) const
        {
            node ans;
            for (int i=1;i<=n;i++)
                for (int j=1;j<=n;j++)
                {
                    ans.m[i][j]=0;
                    for (int k=1;k<=n;k++)
                        ans.m[i][j]=(ans.m[i][j]+(LL)m[i][k]*a.m[k][j])%mod;
                    //这给我们一个启示,取%时不能偷懒,还是要一步一步的进行 
                }
            return ans;        
        }
        void clear()
        {
            memset(m,0,sizeof(m));
        }
        node KSM(LL k)
        {
            k--;
            node ans=(*this),a=(*this);
            while (k)
            {
                if (k&1)
                   ans=ans*a;
                a=a*a;
                k>>=1;
            }
            return ans;  
        }
    };
    
    int main()
    {
        node m,ans;
        scanf("%d%lld",&n,&k);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
                scanf("%lld",&m.m[i][j]);
        ans=m.KSM(k);
        for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++)
                printf("%lld ",ans.m[i][j]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    解决:微信小程序富文本识别不了空白p标签的方法
    微信小程序
    fastadmin
    微信小程序
    fastadmin使用笔记
    fastadmin使用笔记
    您有新的订单,请注意查收 提示音
    js获取视频第一帧生成图片
    解决JQ WeUI 的 Picker无法动态传值的问题
    微擎 人人商城小程序获取不到用户信息
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673603.html
Copyright © 2011-2022 走看看