Skip to content

Instantly share code, notes, and snippets.

@KPCCoiL
Created November 10, 2014 09:25
Show Gist options
  • Save KPCCoiL/73e938502346dc8696b6 to your computer and use it in GitHub Desktop.
Save KPCCoiL/73e938502346dc8696b6 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <utility>
using namespace std;
template<class T, T M>
class mods {
T v;
public:
mods() {}
mods(T v) : v(v%M) {}
inline friend bool operator== (mods const& l, mods const& r) { return l.v == r.v; }
inline friend bool operator< (mods const& l, mods const& r) { return l.v < r.v; }
inline friend mods operator+ (mods const& l, mods const& r) { return mods(l.v+r.v); }
inline friend mods operator- (mods const& l, mods const& r) { return mods(l.v-r.v); }
inline friend mods operator* (mods const& l, mods const& r) { return mods(l.v*r.v); }
inline friend mods operator/ (mods const& l, mods const& r) { return mods(l.v/r.v); } //XXX
inline friend mods operator+ (mods const& l, T const& r) { return mods(l.v+(r%M)); }
inline friend mods operator- (mods const& l, T const& r) { return mods(l.v-(r%M)); }
inline friend mods operator* (mods const& l, T const& r) { return mods(l.v*(r%M)); }
inline friend mods operator/ (mods const& l, T const& r) { return mods(l.v/(r%M)); } //XXX
inline friend ostream& operator << (ostream& os, mods const& r) { os << r.v; return os; }
inline friend istream& operator >> (istream& is, mods& r) { is >> r.v; r.v %= M; return is; }
};
int main() {
using namespace rel_ops;
mods<int, 10> a(13), b(12), c;
cin >> c;
cout << boolalpha << (a>b) << endl;
cout << a+b+c << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment