快速冪(模板)

2021-08-15 12:52:18 字數 667 閱讀 4066

對於任何乙個整數的模冪運算

a^b%c

對於b我們可以拆成二進位制的形式

b=b0+b1*2+b2*2^2+…+bn*2^n

這裡我們的b0對應的是b二進位制的第一位

那麼我們的a^b運算就可以拆解成

a^b0*a^b1*2*…*a^(bn*2^n)

對於b來說,二進位制位不是0就是1,那麼對於bx為0的項我們的計算結果是1就不用考慮了,我們真正想要的其實是b的非0二進位制位

那麼假設除去了b的0的二進位制位之後我們得到的式子是

a^(bx*2^x)*…*a(bn*2^n)

這裡我們再應用我們一開始提到的公式,那麼我們的a^b%c運算就可以轉化為

(a^(bx*2^x)%c)…(a^(bn*2^n)%c)

這樣的話,我們就很接近快速冪的本質了

(a^(bx*2^x)%c)…(a^(bn*2^n)%c)

我們會發現令

a1=(a^(bx*2^x)%c)

… an=(a^(bn*2^n)%c)

這樣的話,an始終是a(n-1)的平方倍(當然加進去了取模勻速那),依次遞推

ll mod_pow(ll x, ll n, ll mod)

return res;

}

模板 快速冪

1.萌新的話 快速冪主要是用來解決一些超時間複雜度的冪運算。其主要思想是根據乙個結論 2 n 4 n 2 這樣原本暴力的o n 演算法優化為了o logn 的演算法了。時間複雜度 2.include include include include include using namespace st...

快速冪(模板)

快速冪原理就是將emm 比如求n的m次方nm那麼就將m轉化為2進製數 對每一位進行判斷,如果當前位數為1就進行一次乘法,同時每次判斷後的乘數為n的當前判斷的m的位數的冪。假設當前已經判斷到2進製下m的第k位位數上為一那麼乘上nk。好懂 include define ll long long usin...

快速冪模板

快速冪模板 下面是自己寫的,比較清楚 include include include includeusing namespace std typedef long long ll const ll mod 1e9 7 ll binarypow1 ll a,ll b ll binarypow2 ll...