public static int lcm(long x, long y) {
        // will hold gcd
        long g = x;
        long yc = y;

        // get the gcd first
        while (yc != 0) {
            long t = g;
            g = yc;
            yc = t % yc;
        }

        return (int) (x * y / g);
    }
Euclid's algo for gcd is more general than we need
since we only have powers of 2, but w/e

@param x
@param y
@return The least common multiple of <tt>x</tt> and <tt>y</tt>
s3stream/src/main/java/com/automq/stream/thirdparty/moe/cnkirito/kdio/DirectIOLib.java