常規求冪 二分求冪 快速位求冪

2021-09-12 03:21:17 字數 1252 閱讀 2548

我是因為刷杭電的題目了解到了冪運算,那就貼一下杭電的題目好了

然後在貼一下別人關於冪運算的部落格

題目描述:給定數字a,b,求a^b。

思路:解法包括常規求冪、二分求冪、快速求冪(位運算)。

每一種求法中,要根據b的值進行討論,b=0,>0,<0。

1)常規求冪

常規求冪即是根據ans=aaa*a。。。

根據b的個數來就行求解

2)二分求冪

二分求冪是可以將乘法進行分組

比如aaaaaa=(aa)(aa)(aa),這樣就將6次乘法變成了3次乘法運算。

所以二分求冪即是根據矩陣乘法的結合律,減少重複計算的次數。

3)快速求冪(位運算)

因為冪數b可以看成是乙個二進位制,每乙個1都可以看成是2的倍數。

a21=(a16)*(a4)*(a1)。

而21的二進位制表示為10101。

而每次將b的二進位制從右到左與1進行&運算。

#includeusing namespace std;

double pow1(double, int);//常規求冪

double pow2(double, int);//二分求冪

double pow3(double, int);//快速求冪,位運算

int main()

system("pause");

return 0;}

//常規求冪

double pow1(double a, int b)

return r;

} if (b < 0)

return 1/r; }

} //二分求冪

double pow2(double a, int b)

if (b > 0)

base *= base;

b /= 2;

} return r;

} if (b < 0)

c /=2;

base *= base;

} return 1 / r; }

} //快速求冪,位運算

double pow3(double a, int b)

if (b > 0)

b >>=1;

base *= base;

} return r;

} else

c >>=1;

base *= base;

} return 1 / r;

}}

常規求冪 二分求冪 快速位求冪

題目描述 給定數字a,b,求a b。思路 解法包括常規求冪 二分求冪 快速求冪 位運算 每一種求法中,要根據b的值進行討論,b 0,0,0。1 常規求冪 常規求冪即是根據ans a a a a。根據b的個數來就行求解 2 二分求冪 二分求冪是可以將乘法進行分組 比如a a a a a a a a a...

二分求冪,快速求冪

1 2 3 4 5 6 7 8 9 10 11 12 intpow3 inta,intb returnr 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 intpow4 intx,intn result x n 1 whil...

快速求冪二分演算法

includeint a,b void input void pow1 base base base b b 2 每次進行縮半,對base base base這一步起到約束作用 printf d n r int main 二分演算法 求a b 二分法 此處b b 2 體現二分 base a base...