由於計算機底層的關係,計算機在計算加的時候往往要比計算乘要快,所以我們可以用加法來實現乘法。
乘法其實就是讓乘數個被乘數相加(也許可以這麼說吧),由於計算機是二進位制的,所以我們使用二進位制運算加法。
快速乘的原理是乘法分配律。
例如計算20*14,首先把14化成二進位制數,1110;然後就是20*0*2^0+20*1*2^1+20*1*2^2+20*1*2^3
。
**實現
typedef
long
long
int ll;
ll qmul
(ll a,ll b,ll mod)
//快速乘,mod是為了防止越界
return ans;
}
其實快速乘搞懂了,快速冪也就差不多了,二者都是借用了二進位制的運算加快計算速度
快速冪就是b個a相乘,將b轉化成二進位制,把冪與1進行與運算,判斷是否乘對應指數次冪的數。
例如b為11,轉換後為1011,a^b=a^(1*2^0)*a^(1*2^1)*a^(0*2^2)*a^(1*2^3)
。
**如下:
long
long
fast
(long
long a,
long
long b,
long
long mod)
return res;
}
快速冪和快速乘
2 10 2 5 2 5 2 5 2 2 4 2 4 2 2 2 2 2 2 2 1 2 1 2 1 2 2 0 有些時候偶數的情況就只需要乘它本身就夠了,時間複雜度少了很多,這樣的話2 10只需要5步就可以求出來了,但是迴圈的話,卻需要十次。在二進位制中假如是2 10那麼10對應的二進位制就是10...
快速冪和快速乘
2.板子 計算a k p 把k拆成二進位制表示形式,比如k等於5的時候,k 101 2 c1 1 c2 0 c3 1 預處理a c1,a c2,a ct 這樣計算a k p時,答案即為res a c1 a c3 a 2 0 2 0 a a 2 1 2 1 a a 2 2 2 2 a a 2 3 2 ...
快速冪 快速乘
直接求解,需要迴圈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...