• 算法 快速幂


    1.整数快速幂

    计算 a^p  

    a ^ p =a ^ ( k * d + c ) = ( a ^ k) ^ d * a ^ c;

    e.g. 2 ^ 5 = ( 2 ^ 2 ) ^ 2 * 2 ^ 1 计算次数减少

    对应p的二进制位,若该二进制位为1, ans乘上该位的res幂次,每二进制位乘上该位幂次 res*=res

    //整数快速幂 计算a^p
    ll qpow(ll a, ll p)
    {
        ll ans=1, res=a;
        while(p)
        {
            if(p&1)
            {
                ans*=res; //p该二进制位为1 乘上幂次
            }
            res*=res; // 二进制位幂次相乘
            p>>=1;
        }
        return ans;
    }

    2.矩阵快速幂

    矩阵a,b相乘要满足条件:a的行数==b的列数

    类似整数快速幂 把整数相乘替换乘矩阵相乘

    //矩阵快速幂
    
    struct Mat
    {
        ll x[N][N];
    };
    Mat c;
    ll n;
    
    Mat multi(Mat a, Mat b)
    {
        Mat tmp;
        mem(tmp.x);
        fo(i,n)
            fo(j,n)
                fo(k,n)
                tmp.x[i][j]+=a.x[i][k]*b.x[k][j];
        return tmp;
    }
    
    Mat m_qpow(Mat a, ll p)
    {
        //整数乘法替换成矩阵乘法
        fo(i,n) c.x[i][i]=1;
        Mat ans=c, res=a;
        while(p)
        {
            if(p&1)
            {
                ans=multi(ans,res);
            }
            res=multi(res,res);
            p>>=1;
        }
        return ans;
    }
  • 相关阅读:
    vi常用操作
    Python练习题
    Jmeter也能IP欺骗!
    mysql主从配置
    性能测试之mysql监控、优化
    Git 命令
    Chrome——F12 谷歌开发者工具详解
    Appscan
    微信群发红包抢红包设计测试用例
    MySQL基础篇(1)SQL基础
  • 原文地址:https://www.cnblogs.com/op-z/p/10778932.html
Copyright © 2020-2023  润新知