View Javadoc
1   /*
2    * Copyright (C) 2012-2015 Christian Sterzl <christian.sterzl@gmail.com>
3    *
4    * This file is part of Bittwiddling.
5    *
6    * Bittwiddling is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * Bittwiddling is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with Bittwiddling.  If not, see <http://www.gnu.org/licenses/>.
18   */
19          
20  package com.vcollaborate.math;
21  
22  import com.google.common.math.BigIntegerMath;
23  
24  public final class CombinatoricUtils {
25  
26    private CombinatoricUtils() {
27    }
28  
29    /**
30     * Calculates the possible combinations of chosen types (r) from a list of types (n) or n over r.
31     * <p>
32     * Mathematical it is following formula: <br>
33     * \(\binom{n}{r} = \frac{n!}{r!(n-r)!}\)
34     */
35    public static final long combinations(final int n, final int r) {
36      return BigIntegerMath.factorial(n)
37          .divide(BigIntegerMath.factorial(r).multiply(BigIntegerMath.factorial(n - r)))
38          .longValue();
39    }
40  }