Math 计算一个方程式对数组中的项为真的次数

Math 计算一个方程式对数组中的项为真的次数,math,logic,equation,Math,Logic,Equation,我有一个包含从1到1000的整数的数组。我试图计算这个等式为真的次数A+B+C+D=E其中A您需要将1..1000范围内的每个值E的整数分区数计算为4个部分 Python函数countparts计算此类分区的数量 def cp(n, k, m): if k == 0: if n == 0: return 1 else: return 0 res = 0 for i in range(min(n

我有一个包含从1到1000的整数的数组。我试图计算这个等式为真的次数
A+B+C+D=E
其中
A您需要将1..1000范围内的每个值E的整数分区数计算为4个部分

Python函数
countparts
计算此类分区的数量

def cp(n, k, m):
    if k == 0:
        if n == 0:
            return 1
        else:
            return 0
    res = 0
    for i in range(min(n + 1, m + 1)):
        res += cp(n - i, k - 1, i)
    return res

def countparts(n, k):
    return cp(n - k, k, n - k + 1)

print(countparts(8, 4))

>> 5    (1115, 1124, 1133, 1223, 2222)
但对于大的争论,它的工作速度很慢

我还找到了快速获取所需值的公式:

P(i) = round((i**3 + 3*i*i - 9*i*(i % 2))/144)

你的问题陈述相当含糊。数组是否包含从1到1000的所有整数,还是仅包含一个子集?它能包含重复项吗?数字A–D可以对应同一个数字,还是必须从数组中的不同项目中选择?还有,到目前为止您尝试了哪些解决方案?我的数组包含1到1000之间的所有整数,所以1,2,3,4,999, 1000. 数字A-D可以对应相同的数字,是的。我曾经尝试过一种解决方案,但它速度非常慢,太复杂,彼此之间包含许多for循环。您对此有什么具体的编程问题?你能提供一份你管理过的最好的报告吗?用合适的数据结构准备数据,用一个简单的例子来检查四个数字的简单集合应该是可以实现的。“我试过一个解决方案”请展示一个MRE。@Yunnosch很遗憾,我已经删除了我的代码,但是如果我有点想法,我会把它贴在这里