封装取模效率会掉很多吗?
实测自己封装的是正常常数的1.5倍诶。
template <int mod>
class Int {
private :
inline int Mod(int x) { return x + ((x >> 31) & mod); }
inline int power(int x, int k) {
int res = 1;
while(k) {
if(k & 1) res = 1LL * x * res % mod;
x = 1LL * x * x % mod; k >>= 1;
}
return res;
}
public :
int v;
Int(int _v = 0) : v(_v) {}
operator int() { return v; }
inline Int operator =(Int x) { return Int(v = x.v); }
inline Int operator =(int x) { return Int(v = x); }
inline Int operator *(Int x) { return Int(1LL * v * x.v % mod); }
inline Int operator *(int x) { return Int(1LL * v * x % mod); }
inline Int operator +(Int x) { return Int( Mod(v + x.v - mod) ); }
inline Int operator +(int x) { return Int( Mod(v + x - mod) ); }
inline Int operator -(Int x) { return Int( Mod(v - x.v) ); }
inline Int operator -(int x) { return Int( Mod(v - x) ); }
inline Int operator ~() { return Int(power(v, mod - 2)); }
inline Int operator +=(Int x) { return Int(v = Mod(v + x.v - mod)); }
inline Int operator +=(int x) { return Int(v = Mod(v + x - mod)); }
inline Int operator -=(Int x) { return Int(v = Mod(v - x.v)); }
inline Int operator -=(int x) { return Int(v = Mod(v - x)); }
inline Int operator *=(Int x) { return Int(v = 1LL * v * x.v % mod); }
inline Int operator *=(int x) { return Int(v = 1LL * v * x % mod); }
inline Int operator /=(Int x) { return Int(v = v / x.v); }
inline Int operator /=(int x) { return Int(v = v / x); }
inline Int operator ^(int k) { return Int(power(v, k)); }
} ;
using mint = Int<998244353>;