#include "Header.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) { __int64_t lvalue, rvalue; lvalue = value; rvalue = num; value = (lvalue % modulo * rvalue % modulo) % modulo; return *this; }