快速幂 二进制转换为十进制思想

将幂的运算转换为二进制的运算,类似于进制转换思想,将二进制转换为十进制。
如次数为10,二进制表示是1010,每次将数右移一位,同时将底数自乘,即每次将底数的次数乘2,只要遇到尾数为1时,将结果乘上底数(这里指自乘后的底数),即可完成幂运算。

long long quick_power(long long base,long long power)
{
    long long result=1;
    //将power看成二进制形式
    while(power)
    {
        //相当于将二进制转化为十进制一样
        //末尾有1就加上相应的数,因为两数相乘指数相加,因此用乘法运算
        //每移动一次就将结果乘2
        if(power&1)
        {
            result*=base;
        }
        power>>=1;
        //base表示2^n
        base*=base;
    }
    return result;
}

如果要求结果保留n位,只要每次对底数和结果取模即可。

//对结果取模的运算
long long quick_power(long long base,long long power,long long mod)
{
    long long result=1;
    base%=mod;
    //将power看成二进制形式
    while(power)
    {
        //相当于将二进制转化为十进制一样
        //末尾有1就加上相应的数,因为两数相乘指数相加,因此用乘法运算
        //每移动一次就将结果乘2
        if(power&1)
        {
            result=(result*base)%mod;
        }
        power>>=1;
        //base表示2^n
        base=(base*base)%mod;
    }
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值