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