每日一题——64位整数乘法

题目

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;
}
posted @ 2025-03-03 16:44  PZnwbh  阅读(23)  评论(0)    收藏  举报