1. 程式人生 > >【算法學習】快速冪

【算法學習】快速冪

quick a* 而是 操作 二分 long spa 表示 strong

快速冪可真是一個好東西

我覺得和高精度,或者快速冪模搭配

首先

快速冪是利用二進制表示指數,利用二分的思想來進行冪的運算

a^11=a^(1*2^0+1*2^1+0*2^2+1*2^3)

typedef long long LL;

LL quick_pow(int n,int x){
    LL ans=1,base=n;
    while(x){
        if(x&1) ans*=base;
        base*=base;
        x/=2;//x>>=1;
    }
    return ans;
}

就是底數不斷地從a*2^0->a*2^1->a*2^2

而是否讓ans*當前底數取決於當前指數的二進制最後一位,例如

11的二進制表示為1011,

第一次為1,√

第二次為1,√

第三次為0,×

第四次為1,√

表示就是if(x&1),表示最後一個是否為1,&是且操作

而base*base就是底數的不斷上升

最後return ans即可

【算法學習】快速冪