快速乘与快速幂

今天本来打算整理学长昨天讲的问题,结果下午…不多说了,快上正经事
知识点一:
快速幂
在介绍快速幂之前我们先引进一个取模方法
例题:
求A^B的最后三位数表示的整数。 说明:A^B的含义是“A的B次方”
对此问题我们不难直接进行for循环将A累乘B次,但当A与B足够大时,我们也会发现它会爆数,因此我们使用下面方法,防止爆数

#define LL long long
LL fun2(LL a,LL b)
{
    LL sum;
    for(int i=0;i<b;i++)
    {
        sum=sum*a;
        sum%=1000;
    }
    return sum;
}

在这里我们先进行操作再进行取最后三位数字;
因为(a+b)%p=(a%p+b%p)%p
(ab)%p=(a%pb%p)%p
这这里的快速幂主要是使用第二个

const long long  mod =1e9+7;
long long qpow(long long a,long long b)
{
    long long t=1;
    a%=mod;
    while(b)
    {
        if(b%2==1)
        {
            t=t*a%mod;
        }
            a*=a;
            b/=2;
    }
    return t;
}

知识点二:
快速乘

long long qmul(long long a,long long b)
{
    long long  t=0;
    while(b)
    {
        if(b%2==1)
        {
            t=t+a;
        }
        a+=a;
        b/=2;
    }
    return t;
}

其实快速幂与快速乘类似,都是依靠二进制的原理进行一定的操作变值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pig2687

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值