The Java Program: Combinations.java

  1 import java.math.BigInteger;
  2 
  3 class Combinations {
  4 
  5    static BigInteger choose (long n, final long m) {
  6       BigInteger r = BigInteger.valueOf (1);
  7       if (2*m>n) choose(n,n-m);
  8       for (int i=1; i<=m; n--, i++) {
  9          r = (r.multiply (BigInteger.valueOf(n))).divide (BigInteger.valueOf (i));
 10       }
 11       return (r);
 12    }
 13 
 14    static BigInteger sum (final long p) {
 15       BigInteger r = BigInteger.valueOf (0);
 16       for (long i=1; i<=p; i++) {
 17          r = r.add (fact(i).multiply (BigInteger.valueOf(sterling (p, i))));
 18       }
 19       return (r);
 20    }
 21 
 22    public static BigInteger fact (final long n) {
 23       BigInteger r = BigInteger.valueOf (1);
 24       for (long i=2; i<=n; i++) {
 25          r = r.multiply (BigInteger.valueOf (i));
 26       }
 27       return r;
 28    }
 29 
 30    static long sterling (final long n, final long i) {
 31       if (i==0) return 0;
 32       if (n==i) return 1;
 33       return (i*sterling(n-1,i)+sterling(n-1,i-1));
 34    }
 35 
 36 
 37    public static void main (String [] args) {
 38       try {
 39          final long  n = Long.valueOf(args[0]).longValue();
 40          final long  m = Long.valueOf(args[1]).longValue();
 41 
 42          System.out.println (choose(n,m));
 43          System.out.println (sterling(n,m));
 44          System.out.println (sum(n));
 45 
 46       } catch (ArrayIndexOutOfBoundsException e) {
 47          System.out.println ("Two arguments are required.");
 48       } catch (NumberFormatException e) {
 49          System.out.println ("The argument must be an integer.");
 50       }
 51    }
 52 }
 53