每日一题——64位整数乘法
题目
题解
这道题是要先算出a*b再对其结果进行求模(取余),因为a和b的最大值为1e+18,我们知道乘法有的时候会溢出,即使是 longlong 也可能在乘法时爆掉。所以我们寻找一种能高效完成乘法操作并且不会爆 longlong 的算法,也就是快速乘。快速乘(Fast Multiplication)是一种用于高效计算大整数乘法的算法,特别适用于处理大数相乘时避免溢出或提高计算效率的场景。它的核心思想是通过二进制分解来减少乘法的次数,类似于快速幂的思路。
参考代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll mul(ll a, ll b, ll p){
ll res = 0;
while(b){
if(b & 1) res = (res + a) % p;
a = a * 2 % p;
b >>= 1;
}
return res;
}
int main(){
ll a, b, p;
cin >> a >> b >> p;
cout << mul(a, b, p) << endl;
return 0;
}

浙公网安备 33010602011771号