zoukankan      html  css  js  c++  java
  • 矩阵快速幂 初级板子 待更新

     基础 矩阵乘法

    关于 快速幂已经了解了

    所以现在就是 矩阵快速幂了  相同的套路 只不过是运用到矩阵上面了;

    推荐blog :http://www.cnblogs.com/SYCstudio/p/7211050.html

    然后自己手写了两遍 之前一直不敢接触  其实接触了才发现 大概也不是很难的东西。

    加油 多学一些东西

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 120;
    const int mod = 1e9+7;
    int n;//n*n的矩阵
    
    ll a[maxn][maxn];
    class Matrix
    {
    public:
        ll s[maxn][maxn];
    
        Matrix()//矩阵初始化
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    s[i][j] = 0;
        }
    
        Matrix(ll a[maxn][maxn])//赋值初始化
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    s[i][j] = a[i][j];
        }
    
        void print()
        {
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++)
                {
                    if(j!=0)
                        printf(" ");
                    printf("%lld",s[i][j]);
                }
                puts("");
            }
        }
    };
    
    Matrix operator *(Matrix a,Matrix b) // 重载符号*
    {
        Matrix ans;
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    for(int k=0;k<n;k++)
                        ans.s[i][j] = (ans.s[i][j] + a.s[i][k]*b.s[k][j]%mod)%mod;
        return ans;
    }
    
    void _pow(ll k)//快速幂板子
    {
        Matrix A(a),B(a);
        while (k >0)
        {
            if(k&1)
                A= A*B;
            B=B * B; //这里还是不能用B*=B;
            k>>=1;
        }
        A.print();
    }
    int main ()
    {
        ll k;//k次方
        scanf("%d %lld",&n,&k);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%lld",&a[i][j]);
        k--;
        /*注意,这里为什么要-1呢,因为我们知道a^1是a,
        对于矩阵来说就是A^1是A,所以在传进去的时候先-1(相当于已经进行了一次操作),
        而若k==1,则在Pow(Po-1)中不会执行循环,此时也正好是矩阵A*/
        _pow(k);
    }

    51nod 矩阵快速幂 求 斐波那契数列第n项值 

  • 相关阅读:
    五大常用算法之三:贪心算法
    五大常用算法之二:动态规划算法
    pycharm最新激活码2020
    pgsql安装 centos自带的9.2.4
    centos 7+ 安装python虚拟环境
    常见HTTP状态码
    python搜索引擎和框架
    中文分词工具jieba的使用
    django分页功能 views与templates
    Django-Celery异步发送激活邮件,以及注意点
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7405114.html
Copyright © 2011-2022 走看看