[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/archive/2012/06/21/2557548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值