題目鏈接
http://noi-test.zzstep.com/contest/0x00%E3%80%8C%E5%9F%BA%E6%9C%AC%E7%AE%97%E6%B3%95%E3%80%8D%E4%BE%8B%E9%A2%98/0102%2064%E4%BD%8D%E6%95%B4%E6%95%B0%E4%B9%98%E6%B3%95
分析
直接乘會爆 ,一種方法是類比快速冪,將一個因數按二進制位拆解,但每次操作複雜度是 的;另一種方法是藉助 ,可將複雜度降到
AC代碼
#include <cstdio>
typedef long long ll;
inline ll read() {
ll num = 0;
char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9')
num = num * 10 + c - '0', c = getchar();
return num;
}
inline ll qmul(ll a, ll b, ll p) {
return (a * b - (ll)((long double)a * b / p) * p + p) % p;
}
int main() {
ll a = read(), b = read(), p = read();
printf("%lld", qmul(a, b, p));
return 0;
}