龟速加
思想:把 a * b 看成 b 个 a 相加,直接乘会溢出
,利用二进制拼成b,思想同快速幂,时间复杂度O(logb)
#include <iostream>
using namespace std;
typedef long long LL;
LL qadd(LL a,LL b,LL p)
{
LL res=0;
while(b)
{
if(b & 1) res = (res + a) % p;
a = (a + a) % p;
b >>= 1;
}
return res;
}
int main()
{
LL a,b,p;
cin >> a >> b >> p;
cout<< qadd(a,b,p);
return 0;
}