如何解决笛卡尔形式python程序上的二项式系数
我需要帮助来构建python程序!
好,所以我必须编写一个使用以下公式来求解二项式系数的代码。它的基本含义与j到i的总和相同,只是它相乘。这是二项式定理的推广。
任何人都对如何编写使用此公式打印出二项式系数的python代码有一个好主意。变量是n和i。公式如下:
解决方法
使用变量来累积答案,然后在每次迭代时,将其乘以(n - j + 1)/j
def choose(n,i):
ans = 1
for j in range(1,i+1):
ans *= (n - j + 1)/j
return ans
print(choose(7,5)) # 21
对于较大的值,此函数将返回inf
,因为我们使用的是float而不是int。相反,我们可以计算分子和分母,然后对它们执行整数除法:
def choose(n,i):
i = min(i,n-i)
numer = 1
denom = 1
for j in range(1,i+1):
numer *= (n - j + 1)
for j in range(1,i+1):
denom *= j
return numer // denom
print(choose(100000,99940)) # 1180691979962...
请注意,对于这么大的数字,最好执行i = min(i,n-i)
,因为这样做可以大大提高性能,n choose i = n choose (n-i)
。
答案可能是蛮力的方法,
n = 3
i = 2
ans = 1
for j in range(1,i + 1):
ans *= (n - j + 1) / j
ans
或者,在简化方面,这基本上是您要实现的nCr公式。所以,
import operator as op
from functools import reduce
def ncr(n,r):
r = min(r,n-r)
numer = reduce(op.mul,range(n,n-r,-1),1)
denom = reduce(op.mul,range(1,r+1),1)
return numer // denom
如果您使用的是Python 3.8或更高版本,comb
模块现在包含在math
库中。简单地做
from math import comb
comb(3,2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。