Modular arithmetic

class Modulo(n=0, m=13) {
 
  method init {
     (n, m) = (n % m, m)
  }
 
  method to_n { n }
 
  < + - * ** >.each { |meth|
      Modulo.def_method(meth, method(n2) { Modulo(n.(meth)(n2.to_n), m) })
  }
 
  method to_s { "#{n} 「mod #{m}」" }
}
 
func f(x) { x**100 + x + 1 }
say f(Modulo(10, 13))

Output:

1 「mod 13」

Last updated