其實快速乘和冪有異曲同工之妙(其實都是乘法)。
這裡我們引見我的快速冪中的冪的求法(二進位制的按權展開求和)。
快速冪的鏈結
這裡我們發現快速冪是由於多次運算,資料太大,而簡化的;而快速乘也是這個道理,那怎麼把快速冪轉化到快速乘呢?
我們可以發現冪的運算是對於底數的冪次迴圈所以我們只要把他的冪簡化就可以了,而乘法(x*y)是對於x(或y)的y ( x ) 次相加所以把他的y(x)化簡就可以了。
很簡單,只要把他的x(y)的二進位制按加權求和就可以了。如以下例子:
1211=121011(二進位制)=12 * 2^ 3+12 * 2^ 1+12 * 2^0=96+24+12=132
而**就和冪運算差不多,如下:
int quick-
multiple
(int a,
int b)
return ans;
}
當然我們需要取模來保證資料不會溢位最終如下
int quick-
multiple
(int a,
int b,int mod)
return ans%mod;
}
最後老規矩引入例題:
快速乘這題很簡單只要用上面**引入資料輸入輸出就行了。
如有錯誤希望各位大佬指正。
快速冪 快速乘
直接求解,需要迴圈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...
快速乘,快速冪
老是忘記還是寫下來記錄一下 快速乘,和快速冪都是防止爆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...