問題:
求 (a*b) % m 的值,其中 a,b,m 是1到10^18;
如果直接乘的話,因為a和b還有m都很大,那麼會溢位long long,所以需要一些方法;
樸素的想法是用陣列模擬高精度,但是比較麻煩;
二進位制數也是滿足十進位制豎式乘法運算規律的,我們可以模擬二進位制乘法豎式來計算(a*b)%m,因為其每次只相當於a乘2,再取模就不會溢位了;
**:
1 #include 2#define maxn 100000+10
3#define ll long long
4using
namespace
std;56
ll multi(ll a, ll b, ll m)715
return
ans;16}
1718
int main(void)19
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...
二進位制運算( )
負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...
二進位制運算
一 運算子 按位與 按位或 按位異或 按位取反 按位左移 有符號的按位右移 無符號的按位右移 二 算術運算 二進位制數的算術運算包括 加 減 乘 除四則運算,下面分別予以介紹。1 二進位制數的加法 根據 逢二進一 規則,二進位制數加法的法則為 0 0 00 1 1 0 1 1 1 0 進製為1 1 ...