最快的方式计算 ,当 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