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;
}


浙公网安备 33010602011771号