求 a 乘 b 對 p 取模的值。差點粘個大數板子2333輸入格式
第一行輸入整數 a,第二行輸入整數 b,第三行輸入整數 p。
輸出格式
輸出乙個整數,表示
a*b mod p
的值。資料範圍
1≤a,b,p≤1e18
輸入樣例:
輸出樣例:3
45
2
思路: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解題思路 首先這道題目想到的第乙個思路是直接做乘法,然後再取模,但是...