快速乘和快速冪

2021-09-29 19:32:50 字數 760 閱讀 6500

由於計算機底層的關係,計算機在計算加的時候往往要比計算乘要快,所以我們可以用加法來實現乘法。

乘法其實就是讓乘數個被乘數相加(也許可以這麼說吧),由於計算機是二進位制的,所以我們使用二進位制運算加法。

快速乘的原理是乘法分配律。

例如計算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...