package bruce.math; import java.math.BigDecimal; public class Permutation { public static BigDecimal H(int n, int m) throws IllegalArgumentException { return C(n + m - 1, m); } public static BigDecimal P(int n, int m) throws IllegalArgumentException { return C(n, m).multiply(factorial(m)); } public static BigDecimal C(int n, int m) throws IllegalArgumentException { if (n < m) throw new IllegalArgumentException("n must great equal than m."); return factorial(n).divide(factorial(n - m).multiply(factorial(m))); } public static BigDecimal factorial(int num) throws IllegalArgumentException { if (num < 0) throw new IllegalArgumentException("num must great than zero."); return num <= 1 ? new BigDecimal(1) : factorial(num - 1).multiply(new BigDecimal(num)); } }