快速冪 迴圈 遞迴

2022-07-16 02:21:13 字數 960 閱讀 9788

目錄其實原理很簡單,有初一的學歷就好,你只需要知道(k為正整數):

x2k = xk * xk

x2k+1 = xk * xk * x

任何數的0次方都為1(除0外)

任何數的1次方都為它本身

至於為什麼,問數學老師去

然後一直遞迴下去即可

**(計算xk)

int poww(int x , int k)
這個稍微有億一點點複雜

你需要知道:

任何數都可以用2的次方(不重複)的和來表示(很簡單的道理)

10 = 2 + 8 = 21 + 23

15 = 1 + 2 + 4 + 8 = 20 + 21 + 22 +23

xa1+a2+a3+...+an= xa1 * xa2 * xa3 * ... * xan

不會的問初中數學老師去

那就出來了系不繫很簡單

再舉個栗子:

310 = 32+8 = 32 * 38

把10在二進位制下表示是(1010)2(這裡想一想位權轉換進製10 = 2 + 8 = 21 + 23 )

是不是豁然開朗了

具體實現(1

**:

int poww_loop(int x,int k) 

return res;

}

不詳細講,自己寫**試試,或者到網上搜

把二進位制表示下把數字同時向左(右)移動,越界部分捨去,新增部分補0

n << p = n * 2p

n >>p = n / 2p

10 << 1 = 20

如果n&1 == 1,則n是奇數,否則n是偶數

if(n & 1 == 0)等價於 if(n % 2 == 0),但是位運算的效率會更高

遞迴 快速冪

題目 x yx y xy當y很大,採用如下方式 f x,frac times f x,frac y 2 0,y 0 1,y 0 f x,frac times f x,frac times x y 2 1,y 0 end right.f x,2 y f x,2y y 2 0,y 0 1,y 0f x ...

演算法提高 遞迴 快速冪

理解遞迴的想法不難,關鍵是如何 快速 寫出 正確 高效 的遞迴。函式遞迴呼叫的基本形式 type myfunction 下面以遞迴實現 快速冪 說明一下寫遞迴的一些注意點,這些要點是不是必要的我不知道,我想這需要嚴格的證明。一般求冪的方法是呼叫中的pow 函式,例如求 如果要造輪子的話,一種想法是用...

快速冪(遞迴和非遞迴演算法)

快速冪 exponentiation by squaring,平方求冪 簡單而高效地計算方法,演算法的時間複雜度是o log n 例題 3的5次方如何計算呢?a的n次方 p 方法一 33333 243 進行四次連乘,複雜度為o n 1 適用於a,n都很小的情況。方法二 遞迴演算法 a的n 2次方a的...