描述:
將 \(n\) 轉化為二進位制位, \(n=(n_tn_...n_1n_0)_2\)。
\(n\) 有 \(\left\lfloor\log_2 n \right\rfloor\) 個進製位,所以我們算出 \(a^1,a^2,a^4,a^8,...,a^\) 後,計算 \(\mathbf(log n)\) 次乘法可計算出 \(a^n\)。
展開即為: \(n=n_tt^t+n_t^+n_t^+...+n_12^1+n_02^0\)
其中 \(n_i\in\\) 那麼就有 \(a^n=(a^)=a^\times a^\times ...\times a^\)
即計算了 \(\mathbf(log n)\) 個 \(2^k\) 次冪的數,然後花費 \(\mathbf(log n)\) 的時間選擇二進位制為1對應的冪來相乘。
實現:標準快速冪:
long long int binpow(long long int a,long long int b)
long long int binpow(long long int a,long long int b)
return res;
}
取模快速冪:
long long int binpow_mod(long long int a,long long int b,long long int m)
return res;
}
模板 快速冪
1.萌新的話 快速冪主要是用來解決一些超時間複雜度的冪運算。其主要思想是根據乙個結論 2 n 4 n 2 這樣原本暴力的o n 演算法優化為了o logn 的演算法了。時間複雜度 2.include include include include include using namespace st...
快速冪(模板)
對於任何乙個整數的模冪運算 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的項我們...
快速冪(模板)
快速冪原理就是將emm 比如求n的m次方nm那麼就將m轉化為2進製數 對每一位進行判斷,如果當前位數為1就進行一次乘法,同時每次判斷後的乘數為n的當前判斷的m的位數的冪。假設當前已經判斷到2進製下m的第k位位數上為一那麼乘上nk。好懂 include define ll long long usin...