Задача C. Java.FiniteField.Hard

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Необходимо реализовать класс Num

У класса должны быть:

Конструктор принимающий value и modulo

При этом если modulo == 0, value сохраняется без изменений, иначе value берется по модулю modulo

Конструктор копирования, копирующий оба поля

Функция Num plus(Num rhs) складывающая 2 числа, modulo результата при этом равно максимальному

Функция Num plus(int rhs) складывающая 2 числа, modulo результата при этом равно this.modulo

Функции разности: Num minus(Num rhs), Num minus(int rhs), результаты аналогично сложению

Функции умножения: Num mult(Num rhs), Num mult(int rhs), результаты аналогично сложению

Функция-геттер getValue возвращающая value

Функция-геттер getModulo возвращающая modulo

При всех операциях value берется по модулю modulo

      
      public class Num 
      {
        Num(int value, int modulo) { ... }
        Num(Num num) { ... }

        Num plus(Num rhs) { ... }
        Num plus(int rhs) { ... }

        Num mult(Num rhs) { ... }
        Num mult(int rhs) { ... }

        Num minus(Num rhs) { ... }
        Num minus(int rhs) { ... }

        int getModulo() { ... }
        int getValue() { ... }
      }
      
  

Пример теста

    
        Num a = new Num(5, 10);
        Num b = new Num(4, 15);
        Num c = a.mult(b);
        Num d = c.mult(5);
        req(c.getValue() == 5);
        req(c.getModulo() == 15);
        req(d.getValue() == 10);
        req(d.getModulo() == 15)
    
  

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса


0.043s 0.012s 13