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