acwing 90. 64位整数乘法
题目描述
求 aa 乘 bb 对 pp 取模的值。
输入格式
第一行输入整数aa,第二行输入整数bb,第三行输入整数pp。
输出格式
输出一个整数,表示
a*b mod p
的值。数据范围
1≤a,b,p≤10181≤a,b,p≤1018
输入样例:
3 4 5
输出样例:
2
位运算
分析
a*10 = a*(1011)
和快速幂的思想类似,只不过把里面的乘换成了加
代码
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
LL qadd(LL a, LL b, LL p)
{
LL res = 0;
LL t = a;
while(b)
{
if(b & 1) res = (res + t) % p;
t = (t + t) % p;
b >>= 1;
}
return res;
}
int main()
{
LL a, b, p;
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld\n", qadd(a, b, p));
return 0;
}