Как я могу реализовать модуль (%), используя только сложение, умножение и сравнение натуральных чисел (исключая 0)?Python

Программы на Python
Anonymous
Как я могу реализовать модуль (%), используя только сложение, умножение и сравнение натуральных чисел (исключая 0)?

Сообщение Anonymous »

Я реализую класс Natural, в котором натуральные числа определяются как {1, 2, 3, ...}, а 0 намеренно исключен.
В этом упражнении вычитание и деление недопустимы, поскольку они выведут нас за пределы набора натуральных чисел. Разрешены только эти операции:
  • сложение
  • умножение
  • сравнение (= 1, "this integer isn't greater than 1"
    self.val = val

    def __str__(self):
    """pretty printer for Naturals"""
    return str(self.val)

    def __eq__(self, other):
    """
    Equality test for naturals.
    @param other Natural the one being compared to
    """
    if isinstance(other, Natural):
    return self.val == other.val
    return False

    def __hash__(self):
    """Tuple hash function"""
    return hash((self.val))

    def __add__(self, other):
    """
    Natural addition
    @param other Natural the one being added to self
    """
    assert isinstance(other, Natural), "other must be a Natural"
    return Natural(self.val + other.val)

    def __mul__(self, other):
    assert isinstance(other, Natural), "other must be a natural"
    return Natural(self.val * other.val)

    def __lt__(self, other):
    assert isinstance(other, Natural), "other must be a natural"
    return self.val < other.val

    def __mod__(self, other):
    """
    I need to implement mod on the Naturals (which in this case are exclusive of zero.)
    Remember, subtraction and division are undefined here.
    """
    pass

    def main():
    print(Natural(7) % Natural(2))

    if __name__ == "__main__":
    main()
    [/code]
    Вопрос:
    Учитывая, что вычитание и деление запрещены, как я могу вычислить % b, используя только сложение, умножение, сравнение и равенство?
    Я ищу алгоритмический подход, который не выходит за рамки этих ограничений.
    Я открыт для реализации других разумных методов, которые не выходят за пределы набора.>

Вернуться в «Python»