Problem Description
There are exactly ten ways of selecting three from five, 12345:
123, 124, 125, 134, 135, 145, 234, 235, 245, and 345
In combinatorics, we use the notation, 5C3= 10.
In general,
nCr = |
n!
r!(n-r)! |
,where r<=n, n! = n*(n-1)…*3*2*1, and 0! = 1. |
It is not until n = 23, that a value exceeds one-million: 23C10= 1144066.
How many, not necessarily distinct, values of nCr, for 1 n 100, are greater than one-million?
Python
Easy, what we need is just brute force method.
def C(a, b): if a < b: return -1 temp1 = 1 temp2 = 1 bb = 0; if b > (a / 2): bb = a - b else: bb = b for i in xrange(bb): temp1 = temp1 * (a - i) for i in xrange(bb): temp2 = temp2 * (1 + i) return (int)(temp1 / temp2); MAX_NUM = 1000000 count = 0 for a in xrange(1, 101): for b in xrange(1, (a / 2) + 1): ret = C(a, b) if ret > MAX_NUM: if (b == a / 2) and (a % 2 == 0): count = count + 1 else: count = count + 2 print count