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

    说明

    n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    typedef long long ll;
    
    const int mod = 1e9 + 7;
    
    ll n, k;
    ll ans[110][110], a[110][110], b[110][110];
    
    void mul2()
    {
        memset(b, 0, sizeof(b));
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                for (int k = 1; k <= n; k++)
                    b[i][j] = (b[i][j] + ans[i][k] * a[k][j] % mod) % mod;
        memcpy(ans, b, sizeof(b));
    }
    
    void mul1()
    {
        memset(b, 0, sizeof(b));
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                for (int k = 1; k <= n; k++)
                    b[i][j] = (b[i][j] + a[i][k] * a[k][j] % mod) % mod;
        memcpy(a, b, sizeof(b));
    }
    
    void qpow(ll b)
    {
        for (int i = 1; i <= n; i++)
            ans[i][i] = 1;
        while (b)
        {
            if (b & 1)
                mul2();
            mul1();
            b >>= 1;
        }
    }
    
    int main()
    {
        scanf("%lld%lld", &n, &k);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                scanf("%lld", &a[i][j]);
        qpow(k);
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
                printf("%lld ", ans[i][j]);
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    jsp登录显示
    flask 分页
    module pip has no attribute main
    html active属性
    Centos7配置
    python爬虫笔记----4.Selenium库(自动化库)
    python爬虫笔记
    python报错记录
    mybatis逆向文件
    python简单验证码
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7815486.html
Copyright © 2011-2022 走看看