快速冪運算詳解,二進位制運算

2021-10-10 20:54:25 字數 1082 閱讀 5934

昨天剛剛學了快速冪運算來加快冪運算,即ax,來總結一下

我們最常用的冪運算是,使用乙個迴圈語句來控制迴圈乘或者直接使用庫函式pow(int a,int n)來實現冪運算。

使用迴圈語句來進行冪運算,時間複雜度是o(n)

再進行網上查詢了解到pow庫函式的時間複雜度會比o(n)還大

了解鏈結為

所以我們使用一種新的演算法來解決超時問題

快速冪運算

快速冪運算實際上是用了二分的思想,不過二分法還沒自學到那,就直接和你們說原理了

比如a56 ,我們如果不乙個乙個a相乘的話,怎麼解決算才會減少時間呢,在我們實際運算乙個冪運算的時候,給你乙個28,你是不是會進行24 *24來算2的8次方

不會吧不會吧真的還有人乙個乙個乘來算出2的8次方叭!

重新回到正題,a56 = (a28)2 = ((a14)2)2= ((a7)2)2)2 ,到奇數的時候怎麼辦? a7 = a(3+3+1)=(a3)2 * a,直到化到a,這樣算下來時間複雜度就是o(logn),明顯大大縮短了時間。

接下來敲一下**

quick pow簡稱qp

int qp(int a,int n)
這就是快速冪的**,就這麼短就縮短了大部分時間

接下來說一下**細節

這裡是運用了二進位制轉換來達到**簡便。

比如10的二進位制為1010,計算210的時候可以如下計算

我們知道2

10 =2 (20*0+21*1+22*0+23*1)

所以計算an的時候也一樣

化為二進位制的好處在於

可讓a=a * a一直執行,當取到n的二進位制不為0的時候就進行乘進去。

n&1的意思是 n的二進位制和1進行 位與預算

插入乙個位與預算的知識,比如10和1位與運算,10的二進位制為1010,1的二進位制就是1,位與運算的規則是,每個位置上一一對應,若同為1,則為1,如以下:

1010

0001

——0000

乙個整數和1進行位與運算,即是取這個整數二進位制的最後一位數,再配合右移運算子》便可取完整個整數的二進位制每個位數。

最後當n>>1 =0的時候結束迴圈,即可求得an.

二進位制運算

運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...

二進位制運算( )

負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...

二進位制運算

一 運算子 按位與 按位或 按位異或 按位取反 按位左移 有符號的按位右移 無符號的按位右移 二 算術運算 二進位制數的算術運算包括 加 減 乘 除四則運算,下面分別予以介紹。1 二進位制數的加法 根據 逢二進一 規則,二進位制數加法的法則為 0 0 00 1 1 0 1 1 1 0 進製為1 1 ...