64位整数乘法

题目传送

虽然题很简单,也有其他做法

但这里介绍一种灵活运用二进制的做法

举例就懂了
\((6)_{10}*(9)_{10}=(110)_2*(9)_{10}=(2^2+2^1)_{10} *(9)_10=9*2^2+9*2\)

然后用类似于快速幂的做法边%边+即可

#include<iostream>

using namespace  std;
long long a,b,p;
long long solve(long long a,long long b){
    long long ans=0,base=a;
    while(b){
        if(b&1) {
            ans+=base;
            ans%=p;
        }
        base=(2*base)%p;
        b>>=1;
    }return ans%p;
}
int main(){
    cin>>a>>b>>p;
    cout<<solve(a,b);
    return 0;
}
posted @ 2021-08-13 11:31  归游  阅读(59)  评论(0编辑  收藏  举报