如果题目说数据很大,还需要求余,那么代码就可以这么写
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; }