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;
}