快速幂 c++实现
有些情况下,需要计算 a^n(a的n次方),如果n比较大(如1e9),则要遍历n次,速度比较慢。此时用快速幂可以增加效率。
原理:如果 a^n(n%2==0),也就是n为偶数,则转化为 a的平方的二分之n次方,(指数变为原来的二分之一,底数平方)。如果 a^n(n%2!=0),也就是n为奇数,则先转化为 a*a^{n-1},此时n‑1为偶数,以此类推。
代码实现:
int qP(int a,int b)
{
int ans=1; //因为之后要做乘法
while(b!=0)
{
if(b%2 ==1)//指数为奇数
{
ans = ans * a ;
}
a = a * a;//指数为偶数
b /= 2;
}
return ans;
}
//数据大时全部换成long long
扩展:
因为 (a*b)%c = a%c * b%c
所以求 a^n%b 的时候,也可以用快速幂处理
代码实现:
int qP(int a,int b,int mod)
{
int ans=1; //因为之后要做乘法
while(b!=0)
{
if(b%2 ==1)//指数为奇数
{
ans = ans * a % mod;
}
a = a * a % mod;//指数为偶数
b /= 2;
}
return ans;
}

浙公网安备 33010602011771号