public static final BigInteger LCD(BigInteger... ints) {
        BigInteger lcd = BigInteger.ONE;

        for (BigInteger n : ints) {
            if (lcd.mod(n).equals(BigInteger.ZERO))
                continue;

            for (BigInteger i = BigInteger.valueOf(2); i.compareTo(n) <= 0; i = i.add(BigInteger.ONE)) {
                if (n.mod(i).equals(BigInteger.ZERO)) {
                    BigInteger fact = BigInteger.ONE;

                    while (n.mod(i).equals(BigInteger.ZERO)) {
                        n = n.divide(i);
                        fact = fact.multiply(i);
                    }

                    if (!lcd.mod(fact).equals(BigInteger.ZERO)) {
                        while (lcd.mod(i).equals(BigInteger.ZERO)) {
                            lcd = lcd.divide(i);
                        }

                        lcd = lcd.multiply(fact);
                    }
                }
            }
        }

        return lcd;
    }