快速幂
int fastpow(int a,int n)
{
int base = a;
int res = 1;
while(n)
{
if(n&1)
res *= base;
base *= base;
n>>=1;
}
return res;
}
(1)n&1(二进制运算),取n的最后一位,判断这一位是否需要跳过
(2)n>>=1,把n右移一位,把刚刚处理过的n的最后一位去掉
模运算
加:(a+b)mod m = ((a mod m)+(b mod m))mod m
减: (a-b)mod m = ((a mod m)-(b mod m))mod m
乘: (axb)mod m = ((a mod m)x(b mod m))mod m
除: 除法运算需要用到逆元
快速幂取模
const int mod = 100000;
int fastpow(int a,int n)
{
int base = a;
int res = 1;
while(n)
{
if(n&1)
res = (res*base)%mod;
base = (base*base)%mod;
n>>=1;
}
return res;
}