快速幂
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。
快速幂1 递推写法
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;
}
快速幂2 位运算写法
LL pow_mod(LL a, LL b, LL p) {//a的b次方求余p
LL ret = 1;
while(b) {
if(b & 1)
ret = (ret * a) % p;
a = (a * a) % p;
b >>= 1;
}
return ret;
}
同理有快速乘
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;
}