计算天然数(正整数) 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

相关文章
相关标签/搜索