// #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;
}