【模板】快速幂

描述

快速幂,就是迅速求解 ap a p mod m o d k k 的结果,按照普通的暴力求解,需要O(p)的复杂度,当p比较大的时候,普通的p次求幂就会变得很慢,马满足不了我们的要求,而快速幂则可以再 O(lgp) O ( l g p ) 的时间内完成求解,原理如下:
ap={ap/2×ap/2,ap×a,if p is evenif p is odd a p = { a p / 2 × a p / 2 , if  p  is even a p × a , if  p  is odd
由于整数的乘法满足乘法结合律,所以才可以用快速幂加快速度。
快速幂总共有两种形式,一种是迭代,一种是递归,既然说了要快速,那就要使用常数比较小的迭代方式,再搭配上位运算,完美的快速幂就诞生了。

code

typedef long long ll;
ll FastPower(ll a, ll p, ll k) {
    ll ans = 1;
    while (p) {
        if (p & 1)  ans = (ans * a) % k;
        a = (a * a) % k;
        p >>= 1;
    }
    return ans;
}

第五行中的if语句意思就是判定p是否为素数,右移1位相当于p/2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值