public uint div(uint a) => (uint)UMul.mulHi(M, a);
public static ulong MulHi(this ulong lhs, ulong rhs) { UMul.mulHi(lhs, rhs, out ulong dst); return(dst); }
public uint mod(uint a) => (uint)UMul.mulHi(M * a, n);
public static ulong mulHi(ulong lhs, ulong rhs) { UMul.mulHi(lhs, rhs, out ulong hi); return(hi); }