整数阶乘组合计算python_统计:Python中的组合

为什么不自己写呢?这是一个单列或类似的:from operator import mul # or mul=lambda x,y:x*y

from fractions import Fraction

def nCk(n,k):

return int( reduce(mul, (Fraction(n-i, i+1) for i in range(k)), 1) )

测试-打印帕斯卡三角形:>>> for n in range(17):

... print ' '.join('%5d'%nCk(n,k) for k in range(n+1)).center(100)

...

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

1 9 36 84 126 126 84 36 9 1

1 10 45 120 210 252 210 120 45 10 1

1 11 55 165 330 462 462 330 165 55 11 1

1 12 66 220 495 792 924 792 495 220 66 12 1

1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1

1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1

1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1

>>>

PS.已编辑以替换int(round(reduce(mul, (float(n-i)/(i+1) for i in range(k)), 1)))

与int(reduce(mul, (Fraction(n-i, i+1) for i in range(k)), 1))一起使用,因此对于大N/K不会出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值