微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

笛卡尔形式python程序上的二项式系数

如何解决笛卡尔形式python程序上的二项式系数

我需要帮助来构建python程序!

好,所以我必须编写一个使用以下公式来求解二项式系数的代码。它的基本含义与j到i的总和相同,只是它相乘。这是二项式定理的推广。

任何人都对如何编写使用此公式打印出二项式系数的python代码一个好主意。变量是n和i。公式如下:

'equation'

解决方法

使用变量来累积答案,然后在每次迭代时,将其乘以(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 举报,一经查实,本站将立刻删除。