#include
using
namespace std;
intquick_pow
(int a,
int b)
base=base*base;
b = b >>1;
//等於b/2
}return ans;
}int
main()
仔細觀察可以發現:指數b是可以拆成二進位制形式的。
例如,當b=11時,b的二進位制為1011,即1×20+1×21+1×23
那麼a11=a1×a2×a8
經過上述操作,要求a11我們只需要進行3次計算,而用樸素演算法需要進行11次計算。
接著就是如何判斷乙個數在二進位制形式的某個位置是0還是1即可
time:o(logn)
int
pow_mod
(int a,
int b,
int c)
while
(b)return ans;
}
快速冪取模演算法依賴於以下公式:
abmod c=((a2)b/2)mod c(b是偶數)
abmod c=((a2)b/2×a)mod c(b是奇數)
模板 快速冪
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...