@@ -41,15 +41,15 @@ namespace cp_algo::math {
4141 }
4242 modint_base (): r(0 ) {}
4343 modint_base (int64_t rr): r(rr % mod()) {
44- r = std::min (r, r + mod ());
44+ r = std::min (r, r + 2 * mod ());
4545 r = m_transform (r);
4646 }
4747 modint inv () const {
4848 return bpow (to_modint (), mod () - 2 );
4949 }
5050 modint operator - () const {
5151 modint neg;
52- neg.r = std::min (-r, mod () - r);
52+ neg.r = std::min (-r, 2 * mod () - r);
5353 return neg;
5454 }
5555 modint& operator /= (const modint &t) {
@@ -60,36 +60,24 @@ namespace cp_algo::math {
6060 return to_modint ();
6161 }
6262 modint& operator += (const modint &t) {
63- r += t.r ; r = std::min (r, r - mod ());
63+ r += t.r ; r = std::min (r, r - 2 * mod ());
6464 return to_modint ();
6565 }
6666 modint& operator -= (const modint &t) {
67- r -= t.r ; r = std::min (r, r + mod ());
67+ r -= t.r ; r = std::min (r, r + 2 * mod ());
6868 return to_modint ();
6969 }
7070 modint operator + (const modint &t) const {return modint (to_modint ()) += t;}
7171 modint operator - (const modint &t) const {return modint (to_modint ()) -= t;}
7272 modint operator * (const modint &t) const {return modint (to_modint ()) *= t;}
7373 modint operator / (const modint &t) const {return modint (to_modint ()) /= t;}
7474 // Why <=> doesn't work?..
75- auto operator == (const modint_base &t) const {
76- return std::min (r, r - mod ()) == std::min (t.r , t.r - mod ());
77- }
78- auto operator != (const modint_base &t) const {
79- return std::min (r, r - mod ()) != std::min (t.r , t.r - mod ());
80- }
81- auto operator <= (const modint_base &t) const {
82- return std::min (r, r - mod ()) <= std::min (t.r , t.r - mod ());
83- }
84- auto operator >= (const modint_base &t) const {
85- return std::min (r, r - mod ()) >= std::min (t.r , t.r - mod ());
86- }
87- auto operator < (const modint_base &t) const {
88- return std::min (r, r - mod ()) < std::min (t.r , t.r - mod ());
89- }
90- auto operator > (const modint_base &t) const {
91- return std::min (r, r - mod ()) > std::min (t.r , t.r - mod ());
92- }
75+ auto operator == (const modint_base &t) const {return getr () == t.getr ();}
76+ auto operator != (const modint_base &t) const {return getr () != t.getr ();}
77+ auto operator <= (const modint_base &t) const {return getr () <= t.getr ();}
78+ auto operator >= (const modint_base &t) const {return getr () >= t.getr ();}
79+ auto operator < (const modint_base &t) const {return getr () < t.getr ();}
80+ auto operator > (const modint_base &t) const {return getr () > t.getr ();}
9381 int64_t rem () const {
9482 uint64_t R = getr ();
9583 return 2 * R > (uint64_t )mod () ? R - mod () : R;
0 commit comments