LongRangeSet (LongRangeSet divisor) { if (divisor instanceof Point) { if (((Point)divisor).myValue > 1 && ((Point)divisor).myValue <= Long.SIZE) { int divisorValue = (int)((Point)divisor).myValue; int lcm = lcm(divisorValue); if (lcm <= Long.SIZE) { long from = MathUtil.clamp(myFrom, -divisorValue + 1, 0); long to = MathUtil.clamp(myTo, 0, divisorValue - 1); long possibleMods = widenBits(lcm); while (Long.SIZE - Long.numberOfLeadingZeros(possibleMods) > divisorValue) { possibleMods = extractBits(possibleMods, divisorValue, Long.SIZE) | extractBits(possibleMods, 0, divisorValue); } return modRange(from, to, divisorValue, possibleMods); } } } return range(myFrom, myTo).mod(divisor); }