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