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

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<string>
    using namespace std;//矩阵快速幂的应用
    const int maxn = 4;
    const int MOD = 100;
    struct Matrix
    {
        int m[maxn][maxn];
    };//矩阵
    const Matrix E =
    {
        1,0,0,0,
        0,1,0,0,
        0,0,1,0,
        0,0,0,1
    };//单位矩阵
    const Matrix P
    {
        2,1,1,0,
        1,2,0,1,
        1,0,2,1,
        0,1,1,2
    };//基矩阵
    //矩阵相乘函数
    Matrix mult(const Matrix& a,const Matrix& b)
    {
        Matrix c;
        memset(c.m,0,sizeof(c.m));
        for(int i=0;i!=maxn;++i)//对于每一行
        {
            for(int k=0;k!=maxn;++k)//对于每一行每一个数
            {
                for(int j=0;j!=maxn;++j)//对于每一列
                {
                    c.m[i][j] += a.m[i][k]*b.m[k][j];
                    c.m[i][j] %= 100; 
                }
            }
        }
        return c;
    }
    //矩阵的快速幂
    Matrix quickPow(long long num)
    {
        Matrix res = E,a = P;
        while(num)
        {
            if(num&1)
            {
                res = mult(res,a);
            }//如果为奇数的话
            a = mult(a,a);
            num >>= 1;//num 除等于 2
        }
        return res;
    }
    int main()
    {
        int t,index = 0;
        while(cin>>t&&t)
        {
            int kase = 0;
            long long n;//计算矩阵的n次幂
            for(int i=0;i!=t;++i)
            {
                cin>>n;
                cout<<"Case "<<++kase<<": "<<quickPow(n).m[0][0]<<endl;
            }
            cout<<endl;
        }
    }
    

      //学习了。ORZ

    不怕万人阻挡,只怕自己投降。
  • 相关阅读:
    es6小记
    CPU密集型和I/O密集型区别
    Gulp小记
    原生表单的小详解
    div无法触发blur事件解决办法
    HMTL列表详解
    Angular开发小笔记
    Angular组件生命周期钩子
    css小笔记
    HTML格式化标签
  • 原文地址:https://www.cnblogs.com/newstartCY/p/11537688.html
Copyright © 2011-2022 走看看