公式:$a*b\mod p = a * b - \lfloor a * b / p \rfloor * p$
#include <iostream>
using namespace std;
typedef unsigned long long ULL;
int main()
{
ULL a, b, p;
cin >> a >> b >> p;
ULL c = (long double)a * b / p; // long double 溢出时保证18-19位的高位精确,c用18位即可精确表示
ULL ans = a * b - c * p; // a * b与c * d尽管会溢出, 但最后结果是在ULL范围(0 - 2^64)内,
// 这里溢出相当于取模2^64,最后结果不会变化
cout << ans << endl;
return 0;
}