1.快速幂
原理:求a的b次方,将b转化为二进制数,该二进制位第i位的权是2^(i-1),
例如

11的二进制是1011
11 = 23×1 + 22×0 + 21×1 + 2o×1
因此,我们将a11转化为算
  
 

实现:
快速幂可以用位运算来实现
b and 1{也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1}b shr 1{就是去掉b的二进制最低位(即第0位)}C++实现为
b & 1//取b二进制的最低位,判断和1是否相同,相同返回1,否则返回0,可用于判断奇偶b>>1//把b的二进制右移一位,即去掉其二进制位的最低位.
递归版:
ll pow(ll a,ll i){  if (i==0) return 1;  int temp=pow(a,i>>1);  temp=temp*temp%MOD;  if (i&1) temp=(ll)temp*a%MOD;  return temp%MOD;}非递归版:
ll f(ll a,ll b,ll n){  int t,y;  t=1; y=a;  while (b!=0){    if (b&1==1) t=t*y%n;    y=y*y%n; b=b>>1;  }  return t;