// #include "num.h" Num::Num(int value, int modulo) : value(value % modulo), modulo(modulo) { } Num &Num::operator=(const Num &other) { value = other.value; modulo = other.modulo; return this; } Num Num::operator+(const Num &other) { return Num(value + other.value, modulo); } Num Num::operator-(const Num &other) { return Num(value - other.value, modulo); } Num Num::operator(const Num &other) { return Num(value * other.value, modulo); } Num Num::operator+(int num) { return Num(value + num, modulo); } Num Num::operator-(int num) { return Num(value - num, modulo); } Num Num::operator*(int num) { return Num(value * num, modulo); } Num &Num::operator+=(const Num &other) { modulo = other.modulo; value = (value + other.value) % modulo; return *this; } Num &Num::operator-=(const Num &other) { modulo = other.modulo; value = (value - other.value) < 0 ? (value - other.value) % modulo + modulo : (value - other.value) % modulo; return this; } Num &Num::operator=(const Num &other) { modulo = other.modulo; value = (value * other.value) % modulo; return *this; } Num &Num::operator+=(int num) { value = (value + num % modulo) % modulo; return *this; } Num &Num::operator-=(int num) { value = (value - num % modulo) < 0 ? (value - num % modulo) % modulo + modulo : ((value - num % modulo) % modulo); return this; } Num &Num::operator=(int num) { long long lvalue, rvalue; lvalue = (long long) value; rvalue = (long long) num; value = (lvalue % modulo * rvalue % modulo) % modulo; return *this; }