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));
}
}