快速幂 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;
}

posted @ 2026-09-05 09:38  Hina_LZQ  阅读(13)  评论(0)    收藏  举报