#include "num.h" #include Num::Num(int Value, int Modulo) { value = (Modulo != 0) ? Value % Modulo : Value; modulo = Modulo; } Num &Num::operator = (const Num &other) { value = other.value; 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) { int64_t val = (static_cast (value) * other.value) % modulo; return Num( static_cast(val), modulo); } Num Num::operator + (int num) { num %= modulo; return Num(value + num, modulo); } Num Num::operator - (int num) { num %= modulo; return Num(value - num, modulo); } Num Num::operator * (int num) { num %= modulo; return Num(value * num, modulo); } Num &Num::operator+=(const Num &other) { value += other.value; return *this; } Num &Num::operator-=(const Num &other) { value -= other.value; while (value < 0) { value += modulo; } value %= modulo; return *this; } Num &Num::operator*=(const Num &other) { value *= other.value; return *this; } Num &Num::operator += (int num) { num %= modulo; value %= modulo; value = (value + num) % modulo; return *this; } Num &Num::operator -= (int num) { value -= num; while (value < 0) { value += modulo; } value %= modulo; return *this; } Num &Num::operator *= (int num) { value = (static_cast (value) * num) % modulo; return *this; }