快速求冪演算法

2021-07-11 01:05:50 字數 605 閱讀 4664

在寫乙個數的冪運算的時候我們通常會想到比較直觀的o(n)演算法,**如下
#include

int main()

printf("%d", res);

}

最近在做資料結構習題的時候學習到了一中快速求冪演算法,時間複雜度為log2(n).

這個演算法運用到了二進位制數的除2運算,二進位制的除法與十進位制基本類似,下面舉乙個例子23/2,結果為1011餘1

所以23(10111)/2(10)=(11)1011,這就意味每除一次2便可以去掉末位的1,23(10111)%2(10)=1.

在計算2^23時我們就可以通過計算2^16(10000),2^4(100),2^2(10),2^1(1)然後相乘,將其分解成了這幾個部分相乘。

下面是**實現

void quickpower(int coefficient,int exponent) 

return result;

}

演算法 快速冪,快速冪求逆元

基本思想 3 11 11 1011 3 1 3 3 2 9 3 4 81 3 8 6561 3 11 3 9 6561 第一種 當資料範圍m,k,p 10 9 int qmi int m,int k,int p return res 值得一提 k 1 除以2向0取整 詳細可以看狀態壓縮dp 內含位運...

快速求冪演算法

我們知道在數學表示式中pow x,n 表示求x n的冪。一般情況下,如果我們要寫乙個程式的話,最簡單的程式可能是這樣的 int pow int x,int n return result 通過使用如上的程式,2 4 2 2 2 2,在程式中做了4 1 3次乘法,但是有沒有更高效的演算法來減少乘法的次...

快速求冪演算法

快速求正整數次冪,當然不能直接死乘。舉個例子 3 999 3 3 3 3 直接乘要做998次乘法。但事實上可以這樣做,先求出2 k次冪 3 2 3 3 3 4 3 2 3 2 3 8 3 4 3 4 3 16 3 8 3 8 3 32 3 16 3 16 3 64 3 32 3 32 3 128 3...