В этом упражнении вычитание и деление недопустимы, поскольку они выведут нас за пределы набора натуральных чисел. Разрешены только эти операции:
- сложение
- умножение
- сравнение (= 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, используя только сложение, умножение, сравнение и равенство?
Я ищу алгоритмический подход, который не выходит за рамки этих ограничений.
Я открыт для реализации других разумных методов, которые не выходят за пределы набора.>