直接求解,需要迴圈b次。
思路:將b轉化為二進位制。對應為1的次數的冪保留,只需要將保留的冪的結果進行乘積就是a**b。
class
solution()
:def
fast
(self, a,b)
: b =
bin(b)[2
:]res =
1for i in b[::
-1]:
if i ==
'1':
res = res * a
a *= a
return res
#include// 如果使用# include會直接匯入所有常用的標頭檔案,編譯時間長
using namespace std;
int main()
cout << res << endl;
return 0;
}
class
solution()
:def
fast
(self, a, b)
: res =
0 b =
bin(b)[2
:]for i in b[::
-1]:
if i ==
'1':
res += a
a *=
2return res
#includeusing namespace std;
typedef unsigned long long ull;
int main()
cout << res << endl;
return 0;
}
快速乘,快速冪
老是忘記還是寫下來記錄一下 快速乘,和快速冪都是防止爆int,或long long,如果爆longlong可以選擇兩者結合,或者使用 int128 上網搜了還是不懂 例題 include iostream using namespace std int main b b 2 a a a m cout...
快速冪 快速乘
快速冪等演算法都是基於二進位制優化的演算法,本文不做過多敘述,在此只是留下模板,並介紹 o 1 快速乘 int qpow int a,int b,int p define qword long long qword qmul qword a,qword b,qword p 利用 a b pmod p...
快速乘 快速冪(矩陣快速冪)
當mod乙個大數p的時候,還有進行乘法的時候可能會爆long long的時候,就用快速乘或者快速冪。參考 先上模板 快速乘 ll multi ll a,ll b,ll m return ans 快速冪 ll pow mod ll a,ll b,ll m return res 快速乘 快速冪 hdu題...