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 算法:矩阵快速幂

    #pragma GCC optimize(3,"Ofast","inline")
    #include<bits/stdc++.h>
    #define mod 1000000007
    #define ll long long
    using namespace std;
    struct ma{
        ll m[101][101];
    };
    ma a,e;
    ll n,k;
    
    ma mul(ma x,ma y)
    {
        ma c;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        c.m[i][j]=0;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        for(int k=1;k<=n;k++)
        c.m[i][j]=c.m[i][j]%mod+x.m[i][k]*y.m[k][j]%mod;
        return c; 
    }
    ma pow(ma x,ll y)  
    {
        ma ans=e;
        while(y)
        {
            if(y&1)
            ans=mul(ans,x);  
            x=mul(x,x);
            y>>=1;
        }
        return ans;
    }
    
    int main()
    { 
        std::ios::sync_with_stdio(false);
        cin>>n>>k;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        cin>>a.m[i][j];     
        for(int i=1;i<=n;i++)
        e.m[i][i]=1;    
        ma ans=pow(a,k);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            cout<<ans.m[i][j]%mod<<" ";
            cout<<endl;
        }  
        return 0;
    }
    View Code

    TengBieBie已经学习了很多关于斐波那切数列的性质,所以他感到一些些厌烦。现在他遇到了一个新的数列,这个数列叫做Float-Bonacci。这里有一个关于Float-Bonacci的定义。

    对于一个具体的n,TengBieBie想要快速计算FB(n).

    但是TengBieBie对FB的了解非常少,所以他向你求助。

    你的任务是计算FB(n).FB(n)可能非常大,请输出FB(n)%1,000,000,007 (1e9+7)即可。

    输入

    输入共一行,在一行中给出一个整数n (1<=n<=1,000,000,000)。

    输出

    对于每一个n,在一行中输出FB(n)%1,000,000,007 (1e9+7)。

    输入样例

    5

    输出样例

    2
          
         *5即可

     
  • 相关阅读:
    Plotagraph软件五分钟光速速成傻瓜教程
    QT插件+ROS 2 新建项目
    QT插件+ROS 1 安装配置
    GitHub 优秀的 Android 开源项目 (精品)
    ROS的launch文件
    编写第一个 Shell 脚本
    CMake 入门实战
    ROS 创建服务和请求
    ROS 小乌龟测试
    【转】C++中的虚函数的实现
  • 原文地址:https://www.cnblogs.com/3200Pheathon/p/11745572.html
Copyright © 2011-2022 走看看