快速冪的學習

計算 S = a^n :

S = a * a * a * a......

   = ( ( (a^2)^2)^2)......

n = 2^k1 + 2^k2 + 2^k3......

例如: 22 = 16+4+2   22的二進制數爲:10110

那麼: a^22 = a^16 * a^4 * a^2

int pow(int a, int n)
{
    int res = 1;
    while (n > 0)
    {
        if (n&1)
            res = res*a;  //若二進制最低位爲1, 則乘以 x*(2^i)
        a = a*a;          //將x平方
        n >>= 1;
    }
    return res;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章