快速乘學習總結

2021-10-02 14:42:14 字數 764 閱讀 1579

當兩個相乘數x y較小時,我們可以直接x * y % p

但當兩個數都為long long型別呢?很明顯直接相乘會爆範圍 。

其實乘法可以轉換成加法,我們可以邊加變取餘;但不是直接 y 個 x 乙個乙個相加,因為這樣絕對會超時。

我們可以將 y 進行進製轉換

**實現:

ll q_mod

(ll x, ll y, ll p)

// ll 代表 long long

x = x <<

1% p;

// 相當於x = x * 2 % p;

y >>=1;

}return ans;

}

看 著 是 不 是 有 快 速 冪 內 味 了利用 long double 捨棄低位且範圍保留18位的特點,加上c++ 的自動轉換功能完成快速乘的運算**實現:

ll q_mod

(ll x, ll y, ll p)

// ll 代表 long long, ld 代表long double

快速乘總結

因為我們知道乘法有的時候會溢位,即使是 long long 也可能在乘法時因為結果過大溢位 當模數也是 long long 所以我們需要尋找一種能高效完成乘法操作並且不會爆 long long 的演算法,也就是快速乘。本文也將對幾種常用快速乘及其優化技巧做個總結。我們知道乘法其實就是把很多個加法運算...

快速乘總結

因為我們知道乘法有的時候會溢位,即使是 long long 也可能在乘法時因為結果過大溢位 當模數也是 long long 所以我們需要尋找一種能高效完成乘法操作並且不會爆 long long 的演算法,也就是快速乘。本文也將對幾種常用快速乘及其優化技巧做個總結。我們知道乘法其實就是把很多個加法運算...

快速乘與快速冪總結

快速乘 a b p while b 把b看成二進位制 a a 2 p 2 式 要採用遞推 取模的方法得到 b b 1 右移一位 printf lld ans 推導過程 a 2 k1 a 2 k2 a 2 k3 a 2 kn p a 2 k1 a 2 k2 a 2 k3 a 2 kn 1 p a 2 ...