快速幂与矩阵快速幂 原理与应用(板子)

本文介绍了快速幂算法及其在高效求解(a^b) mod n中的应用,通过分治思想减少运算次数。接着详细阐述了矩阵快速幂的原理,包括矩阵乘法和如何利用矩阵快速幂优化递推问题。具体应用中,举例展示了如何通过构造矩阵解决不同类型的数列求解问题,如斐波那契数列、带有额外项的递推关系等,并给出了前n项和的快速求法。
摘要由CSDN通过智能技术生成

目录

 

【快速幂】

【代码实现】

【应用】

【矩阵快速幂】

【矩阵乘法】

【代码实现】 

【应用】


【快速幂】

快速幂用于高效求(a^b) mod n 的结果。

考虑用分治思想,当b为偶数时,我们可以把a^b转化为a^(b/2)*a^(b/2),当b为奇数时,我们可以把a^b转化为a^(b/2)*a^(b/2)*a。以此类推,最终b会变成1,并且只需要logb次运算。

【代码实现】

//两种写法

int quick_pow(int a,int b,int mod) //递归
{
    if(b==1) return a;
    int t=quick_pow(a,b/2,mod);
    t=t*t%mod;
    if(b&1)
       t=t*a%mod;
    return t;
}

int quick_pow(int a,int b,int mod)  //非递归
{
    int ret=1;
    while(b)
    {
        if(b&1) ret=ret*a%mod;
        a=a*a%mod;
        b=b/2;
    }
    return ret;
}

【应用】

不再赘述,就是高效求(a^b) mod n 的结果。

【矩阵快速幂】

预备知识:矩阵乘法

【矩阵乘法】

const int N=100;
int c[N][N];
void multi(int a[][N],int b[][N],int n)  //n是矩阵大小
{
    memset(c,0,sizeof(c));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
               c[i][j]+=a[i][k]*b[k][j];
}

把快速幂算法中的乘法改成矩阵的乘法就是矩阵快速幂。

【代码实现】 

const int N=100;
int tmp[N][N];
void multi(int a[][N],int b[][N],int n)
{
    int i,j,k;
    memset(tmp,0,sizeof tmp);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值