fork download
  1. class ModIntegerMeta(type):
  2. def __new__(metacls, name, bases, members):
  3. cls = super().__new__(metacls, name, bases, members)
  4. for name in '__add__', '__sub__', '__mul__', '__neg__', '__repr__':
  5. setattr(cls, name, cls.create_method(name))
  6. return cls
  7.  
  8. def create_method(cls, name):
  9. def method(self, *args):
  10. value = getattr(self.value, name)(*(
  11. arg.value if isinstance(arg, cls) else arg for arg in args
  12. ))
  13. if type(value) is int:
  14. return cls(value, self.mod)
  15. return value
  16. return method
  17.  
  18. class ModInteger(metaclass=ModIntegerMeta):
  19. def __init__(self, value, mod):
  20. self.mod = mod
  21. self.value = value % mod
  22.  
  23. print((-ModInteger(66, 100) + ModInteger(39, 100) * 5))
Success #stdin #stdout 0.1s 14132KB
stdin
Standard input is empty
stdout
29