fn reduction<I: Int>(x: I, e: u32, y: I) -> I
Compute the remainder (x * 2.pow(e)) % y without overflow.
(x * 2.pow(e)) % y