Fork me on GitHub

ACM数论之旅2---快速幂,快速求a^b

如果题目说数据很大,还需要求余,那么代码就可以这么写

LL pow_mod(LL a, LL b){//a的b次方
    LL ret = 1;
    while(b != 0){
        if(b % 2 == 1){
            ret = (ret * a) % MOD ;
        }
        a = (a * a ) % MOD ;
        b /= 2;
    }
    return ret;
}

对于位运算熟的小盆友,还可以写成位运算形式,速度又快,又好理解,在加一个求余p,代码如下

LL mul(LL a, LL b, LL p){//快速乘,计算a*b%p 
    LL ret = 0;
    while(b){
        if(b & 1) ret = (ret + a) % p;
        a = (a + a) % p;
        b >>= 1;
    }
    return ret;
}

 

posted @ 2018-04-09 12:14  梦想飞的菜鸟  阅读(291)  评论(0)    收藏  举报