快速冪(二進位制理解)

2021-09-27 09:34:59 字數 1061 閱讀 3645

已知底數a,指數b,取模值mod。

求ans = a^b % mod

二、樸素演算法(已知可跳過)

ans = 1,迴圈從 i 到 b ,每次將 ans = ans * a % mo

時間複雜度o(b)

void

power

(int a,

int b,

int mod)

}

時間複雜度o(log2b)

最近看團隊老師推薦的《演算法競賽(從入門到高階)——羅勇軍 郭衛斌著》一書,對快速冪演算法有新的理解,之前分奇偶情況感覺理解不是很透徹。

以 211 為例,211 可分為 28 、 22 、21三項相乘,為什麼指數11是分成8、2、1呢?熟悉二進位制的人應該對這三個數很熟悉,分別的23, 21, 20。

恰是如此,在指數的分解上,我們可以把指數化為二進位制。

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

根據紅色標紅式可知,只有當二進位制數字為1時,分解式中對應的項才是有效的(0乘任何數都為0)。

b&1:判斷二進位制最右邊數字是否為1

b>>1:二進位制數向右移一位

二者結合,判斷二進位制每次更新的最右位數字是否為1。

在快速冪演算法中,a更新儲存的是指數b從右往左的每一項(不管指數b最右是不是1,都在一直更新,例如20,21,22,23……),只有當b更新後的最右位是1,ans才會乘上a儲存的項(可結合上面211的例子理解)

int

qmod

(int a,

int b,

int mod)

return ans;

}

1. 杭電oj 1061 rightmost digit.

2. 杭電oj 1097 a hard puzzle.

二進位制快速冪及矩陣快速冪

二進位制快速冪 二進位制快速冪雖然不難寫,但是無奈總是會忘,所以還是在這裡把板子寫一下。二進位制快速冪很好理解 假設我們要求a b,那麼其實b是可以拆成二進位制的,該二進位制數第i位的權為2 i 1 例如當b 11時,11的二進位制是1011,11 2 1 2 0 2 1 2 1,因此,我們將a 轉...

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

昨天剛剛學了快速冪運算來加快冪運算,即ax,來總結一下 我們最常用的冪運算是,使用乙個迴圈語句來控制迴圈乘或者直接使用庫函式pow int a,int n 來實現冪運算。使用迴圈語句來進行冪運算,時間複雜度是o n 再進行網上查詢了解到pow庫函式的時間複雜度會比o n 還大 了解鏈結為 所以我們使...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...