ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

233 matrix

2021-09-04 10:32:18  阅读:193  来源: 互联网

标签:matrix int res ret ++ Mat 12345 233


题源:Problem - 5015 (hdu.edu.cn)

题意

     给出第一行的规律 a00,a01,a02, , , , a0m = 0,233,2333,23333 ,,,,

     第一列的数input给出 a00, a10, a20 , a30, ,,, an0 = 0, a1,a2 ,a3,a4,,,,an

     第 aij 为 ai-1,j + ai, j-1 , 求 an,m

规律总结

    把矩阵看作一列一列的找规律

    可以发现第 j 列 可以很容易通过第 j-1 列 相加推导得出, 除去第一行有些不对称

    第一行分别为 0,233,2333,23333 ,可以将第一个改为23,则 ai= ai-1*10 +3 。 

一般快速幂

    当计算 a ^n 时,例如 12345 ^255  ,需要进行 255次乘法,时间复杂度 O(n)

   可以将时间复杂度降到 O(log n ) 

    方法是 255 = 111111112

    可以将 12345^255 = 12345 ^(2^7*1+2^6*1+ 2*5*1+ + 2^0*1)

                                   = 12345^(2^7) * 12345* (2^6)* *** 12345^(2^0)

     时间复杂度降为项为1的个数和最高次幂的位数 ,8^7  时间复杂度  O(log n*log n)

给出算法

int QuickPower(int a,int n){
    //return a^n
    int ret = 1;
    int tem = a;
    while(n){
        if(n&1)
            ret *= tem;
        tem *= tem;
        n>>=1;
    }
    return ret;
}

 

 

矩阵快速幕

   

将乘法变成矩阵乘法,给出模板。

 

给出算法模板:

    

const int N = 100;
struct Mat
{
    int m[N][N];
} ans, res; //res result

Mat Mul(Mat a, Mat b,int n){
    //定义矩阵的乘法
    Mat ret;
    for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++)
            ret.m[i][j] = 0;

    for (int i = 0; i < n;i++)
        for (int j = 0; j < n;j++)
            for (int k = 0; k < n;k++)
                ret.m[i][j] += a.m[i][k] * b.m[k][j];
    return ret;
}

void QuickPower(int N,int n){
    // 求 n阶方阵 的 N次幂
    for (int i = 0; i < n;i++)
        for (int j = 0; j < n;j++)
            ans.m[i][j] = 0;
    while(N){
        if(N&1)
            ans = Mul(ans, res,n);
        N >>= 1;
        res = Mul(res, res,n);
    }

}

 

标签:matrix,int,res,ret,++,Mat,12345,233
来源: https://www.cnblogs.com/fdbwymz/p/15225871.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有