[Project Euler] Problem 53

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
原文地址:https://www.cnblogs.com/quark/p/2557548.html