最快的方式計算 ,當 n 是正整數的時候。它利用了測試一個數是奇數在計算機上是很是容易的,和經過簡單的移全部位向右來除以 2 的事實。 算法
僞代碼: 測試
1. 1 → y, n → k, a → f 2. 若k不為0, 執行3至6 3. 若k為奇數, y * f → y 4. k 右移 1位 (即 k / 2 → k ,小數點無條件捨去) 5. f * f → f 6. 回到2 7. 傳回y
在C語言中,你能夠寫以下算法: spa
double power(double a, unsigned int n) { double y = 1; double f = a; unsigned int k = n; while (k != 0) { if ((k & 1) != 0) y *= f; k >>= 1; f *= f; } return y; }
此算法的多項式時間爲 比普通算法快(a 自乘100次,多項式時間爲
),在n 較大的時候更爲顯著
例如 計算,普通算法須要算100次,上述算法則只須要算7次
若要計算 可先以上述算法計算
,再做倒數 code