class Int
{
public:
Int(int x): x(x) {} // int 转 Int
operator int() { return x; } // Int 转 int
private:
int x;
}
例如欲在(mathbb{F}_p)中进行运算, 预期效果为:
int result = Int<998244353>(1) * 2 / 3 + 4 - 5;
实现如下:
template <int P>
class Int
{
public:
Int(int n = 0): n((n % P + P) % P) {};
Int(long long n = 0): n((n % P + P) % P) {};
operator int() { return (int)n; }
Int<P> operator+(int x) { return n + x; }
Int<P> operator-(int x) { return n - x; }
Int<P> operator*(int x) { return n * x; }
Int<P> operator/(int x) { return *this * Int<P>(x).pow(-1); }
Int<P> pow(int x) {
x = (x % (P-1) + P-1) % (P-1);
long long ret = 1, N = n;
for (; x; x >>= 1) {
if (x & 1) ret = (ret * N) % P;
N = (N * N) % P;
}
return ret;
}
private:
long long n;
};