64位整數乘法
求 a 乘 b 對 p 取模的值。
輸入格式
第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。
輸出格式
輸出乙個整數,表示a*b mod p的值。
資料範圍
1≤a,b,p≤1018
輸入樣例:34
5輸出樣例:
2解題思路:
首先這道題目想到的第乙個思路是直接做乘法,然後再取模,但是這樣的話會用到高精度,而且還帶了取模的話,就有些麻煩了;所以結合上一到題;a * b ,其實就是b個a相加,那麼同樣我們可以把b先寫成二進位制數,每次判斷b的最低位是否為1,若是則將此時a加到最後的答案上去並取模,然後讓a *= a % p,然後再讓b右移一位。
和上一道題的區別:a = a * a % p -> a = (a + a) % p.
ac**:
#include #include using namespace std;
typedef long long ll;
inline ll hanshu(ll a, ll b, ll p)
return res % p;
}int main(void)
AcWing90 64位整數乘法
快速冪 二分 拆分,一方面二分消除重複計算,另一方面將超過表示範圍的運算降為結果在資料範圍內的運算。其一,ll的表示範圍為略低於2 64,兩個六十四位數相加就可以用unsigned ll儲存,變乘法為加法。其二,對於二分,將b用二進位制表示,將運算拆為移位和加法或乘法。對於具體的演算法,一般快速冪a...
AcWing 90 64位整數乘法
求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a 第二行輸入整數b,第三行輸入整數p 輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a b,p 1018 1 a,b,p 10 1 a,b,p 10 18輸入樣例 3 45輸出樣例 2模板 intfp int a,int...
AcWing 90 64位整數乘法 快速乘
acwing 90.64位整數乘法 求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a,b,p 1018 輸入樣例 3 45輸出樣例 2剛開始看到這個題的時候,我是想到的是質因子相乘,...