两个long long类型的数进行乘法时,很可能会溢出。这时候需要用到龟速乘,将乘法变为若干个加法避免溢出。类似快速幂。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll smul(ll a,ll b,ll p){
if(p==1)return 0;
ll res=0;
while(b){
if(b&1)res=(res+a)%p;
b>>=1;
a=2*a%p;
}
return res;
}
int main(){
ll a,b,p;
cin>>a>>b>>p;
cout<<smul(a,b,p);
return 0;
}