求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数 a,第二行输入整数 b,第三行输入整数 p。
输出格式
输出一个整数,表示
a*b mod p
的值。数据范围
1≤a,b,p≤1e18
输入样例:
3 4 5
输出样例:
2
差点粘个大数板子2333
思路:
1. b = b1 + b2 + b3 , a * b % p = ( a * b1 % p + a * b2 % p + a * b3 % p ) % p
2.这题依旧利用位运算防止爆 long long
3.b 可以被拆成 b = bit(0)*2(0) + bit(1)*2(1) + bit(2)*2(2)······
4. a * b % p = a * (bit(0)*2(0)) + a * (bit(1)*2(1)) + a * (bit(2)*2(2))······
5.当bit(i) == 0 时 a * (bit(i)*2(i)) == 0,当bit(i) == 1时需要把答案加上,每循环一次 a = a * 2 % p 将 a 与 2(i) 同时计算
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a, b, p, ans=0;
scanf("%lld%lld%lld", &a, &b, &p);
while(b)
{
if(b & 1)
ans = (ans + a) % p;
a = a * 2 % p;
b >>= 1;
}
printf("%lld", ans);
return 0;
}