计算2^35方法
第一种
ll sum = 1;
for(int i = 1; i <= 35; i++)
{
sum *= 2;
}
//计算了35次,不够快
快速幂的方法
把235 = 232+2+1
用到位运算 35 = 100011
我们这样写代码
ll quickmi(int a, int b) //a的b次方
{
ll ans = 1;
while(b)
{
if(b&1)//当末位为1时才运算
ans *= a;
a *= a;
b >>= 1;
}
}
//计算了6次
下面看看运算过程,就很明白了
b = 100011;
ans = 1;
a = 2;
ans = 2;
a = 22;
b = 10001;
ans = 21+2;
a = 24;
b = 1000;
ans = 21+2;
a = 28;
b = 100;
ans = 21+2;
a = 216;
b = 10;
ans = 21+2;
a = 232;
b = 1;
最后一次while(b)
ans = 21+2+32;
a = 264;
b = 0;
取模快速幂
int quickmod(int a, int b, int c)
{
int ans = 1;
a %= c;//防止后面爆int
while(b)
{
if(b&1)
ans = (ans*a) % c;
a = (a*a) % c;
b >>= 1;
}
return ans;
}