計算天然數(正整數) n 的 an 的算法

最快的方式計算 a^n,當 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; }

此算法的多項式時間\Omicron(\log n)\! 比普通算法快(a 自乘100次,多項式時間\Omicron(n)\!),在n 較大的時候更爲顯著

例如 計算a^{100},普通算法須要算100次,上述算法則只須要算7次

若要計算a^{n} (n < 0) 可先以上述算法計算a^{|n|},再做倒數 code

相關文章
相關標籤/搜索