/* Utilities */ # include # include int choose(int n, int r); int choose(int n, int r) { int i,ans; if (r<0 && n<0) {printf("Error in choose, %d, %d", n, r); exit(0);} if (r == 0) return 1; if (r < 0) return 0; if (n < r) return 0; if (n == r) return 1; if (r > n-r) r = n-r; ans = 1; for (i=0; i < r; i++) { if ( (INT_MAX)/(n-i) >= ans ) {ans *= n-i; ans /= i+1;} else { printf("Overflow in choose.\n"); exit(0); } } return ans; }