位運算 90 64位整數乘法

2021-09-29 15:37:23 字數 832 閱讀 7692

求 a 乘 b 對 p 取模的值。

輸入格式

第一行輸入整數 a,第二行輸入整數 b,第三行輸入整數 p。

輸出格式

輸出乙個整數,表示a*b mod p的值。

資料範圍

1≤a,b,p≤1e18

輸入樣例:

3

45

輸出樣例:

2
差點粘個大數板子2333

思路:1. b = b1 + b2 + b3 , a * b % p = ( a * b1 % p + a * b2 % p + a * b3 % p ) % p

2.這題依舊利用位運算防止爆 long long

3.b 可以被拆成 b = bit(0)*2(0) + bit(1)*2(1) + bit(2)*2(2)······

4. a * b % p = a * (bit(0)*2(0)) + a * (bit(1)*2(1)) + a * (bit(2)*2(2))······

5.當bit(i) == 0 時 a * (bit(i)*2(i)) == 0,當bit(i) == 1時需要把答案加上,每迴圈一次 a = a * 2 % p 將 a 與 2(i) 同時計算 

#include using namespace std;

typedef long long ll;

int main()

printf("%lld", ans);

return 0;

}

90 64位整數乘法

方法一 類似快速冪的思想,把整數 b 用二進位制表示,即b c k 1 pow 2,k 1 c k 2 pow 2,k 2 c 0 pow 2,0 那麼a b c k 1 a pow 2,k 1 c k 2 a pow 2,k 2 c 0 a pow 2,0 因為a pow 2,i a pow 2,...

AcWing90 64位整數乘法

快速冪 二分 拆分,一方面二分消除重複計算,另一方面將超過表示範圍的運算降為結果在資料範圍內的運算。其一,ll的表示範圍為略低於2 64,兩個六十四位數相加就可以用unsigned ll儲存,變乘法為加法。其二,對於二分,將b用二進位制表示,將運算拆為移位和加法或乘法。對於具體的演算法,一般快速冪a...

AcWing 90 64位整數乘法

64位整數乘法 求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a,b,p 1018 輸入樣例 34 5輸出樣例 2解題思路 首先這道題目想到的第乙個思路是直接做乘法,然後再取模,但是...