快速冪模板及對其的理解

2021-10-25 02:20:26 字數 878 閱讀 2022

下面先貼上學長教的快速冪模板:

typedef long long ll;

ll qpow(ll a,ll b,ll mod)

a=(a*a)%mod;

b>>=1;

} return ans;

}

那麼這個快速冪是如何實現的呢?

原理就是將a^b拆分掉,拆分成若干部分,每一部分a的指數都是2的n次方的格式,下面是乙個例子:

就像這樣指數b被拆分成了三個部分,被拆分的三個部分對應了二進位制的13(1101)的三個1,由此我們得知,可以對指數b進行相應的位運算判斷和實時更新a來計算a的b次方,下面是對於**的解釋:

在qpow函式中定義了ans並賦給其初值1,用它來表示最終答案,然後進入while迴圈,首先進行按位與操作,這一步操作的目的是看看二進位制的b的最低位是否為1,若為1代表被拆分成的各個部分中有這一部分,那就讓ans乘上此時的a,完事之後要更新a的值,以和此時遍歷到的b的位匹配上,如何更新?只要讓a*a即可,打個比方,遍歷到b的最低位時,a就是a的2的0次方,也就是它本身,b的最低為不為0,那就讓ans乘上現在的a,更新a,並讓b右移1位來捨棄b的最低位(因為已經用完它了);當遍歷到b的次低位時,此時a的值是a的2的1次方(在上一步計算完ans後a更新了),但此時b的次低位的值是0,因此這一輪ans不更新,但是a還要更新,因為馬上就要遍歷到b的倒數第三位了,a的值要與之匹配,然後b再右移一位捨棄掉次高位,往後一直重複這樣的操作,直到b變為0,也就是不能再分了為止,最後跳出迴圈並將最終結果ans返回。

對快速冪的理解 C )

時間複雜度是o n 級別,而快速冪能做到o logn 其實b是可以拆成二進位制的,該二進位制數第i位的權 值 為2 i 1 比如說b 11時 11的二進位制是1011,這三項 好像 不怎麼不好求 指數 你可以用longlong 或者用mod也可以 return ret 講到二進位制 一般都會想到這兩...

快速冪 模板及應用

一.快速冪模板 int powermod int a,int b,int mod returnt a b mod view code 參考 鏈結1 鏈結2二.取模運算的性質 1 a b c a c b c c 2 ab c a c b c c 三.相關題目 n oip2013tg d1t1轉圈遊戲 ...

快速冪的理解及使用

wiki 快速冪也稱為平方求冪 exponentiating by squaring 快速冪時計算乙個數的大正整數乘冪的一般方法 對多項式,矩陣也適用 x n begin x x 2 text x 2 text end 平方法轉換思想 將指數的位,二進位制的位,來確定計算哪些冪 x a b n x ...