快速幂(模板代码)

快速幂

快速幂可以让我们降低结果特别大的幂的运算时间(当幂的结果比较小时用快速幂可能反而会增加运算时间),因为快速幂降低了算法的时间复杂度,将其由幂的形式转换成了乘积的形式。除此之外快速幂还可用来求余,因为在计算过程中,可能由于数据过大导致爆掉,这时候就可以用快速幂来求余。
代码如下:

int ksm(int a,int b)//求a的b次方
{
    int ans=1,base=a;
    while(b!=0)
    {
        if(b%2==1)
            ans*=base;
        base*=base;
        b/=2;
    }
    return ans;
}

求余版的代码如下:

int ksm(int a,int b,int mod)//求a的b次方对mod取模
{
    int ans=1,base=a;
    while(b!=0)
    {
        if(b%2==1)
        {
            ans*=base;
            ans%=mod;
        }
        base*=base;
        base%=mod;
        b/=2;
    }
    return ans;
}

取模的原理如下:
(a+b)%mod=(a%mod+b%mod)%mod
(ab)%mod=(a%modb%mod)%mod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值