FastDivULong

Barrett reductionを使用し、高速除算を行う。 ulongをこれで置き換えれば大体うまく動く。

struct FastDivULong {
ulong value;
ulong m;
int lg;
}

Examples

assert(11 / FastDivULong(3) == 3);
assert(11 % FastDivULong(3) == 2);

Meta