我正在为程序简化编写程序。在这个程序中想要使用二项式和三项式定理。
使用二项式扩展:
(X + Y)^ R
Sum(k - > r)x ^ [r-k] y ^ [k] ,
其中k为0且r为二项式。
我可以这样做:
for (k=0; k<=r; k++) {
x_degree=r-k;
y_degree=k;
}
否则,如果我想实现三项式定理,我应该满足形式的约束:
(A + B + C)^ n的
总和(n选择i,j,k)a ^ i b ^ j c ^ k,
其中n是三项式,i + j + k = n。
我想了一段时间,但我无法找到比循环所有可能组合更好的东西,如下所示:
for (int i=0; i<=n; i++)
for (int j=0; j<=n; j++)
for (int k=0; k<=n; k++) {
if((i+j+k)==n) {
find_coefficient(i,j,k);
set_degree_values(i,j,k);
proceed();
}
}
所以我的问题是:如何在不绕过所有可能的度数组合的情况下实现三项式扩展?
谢谢。
答案 0 :(得分:1)
以第四度为例,三个变量的幂可以列为
004, 013, 022, 031, 040,
103, 112, 121, 130,
202, 211, 220,
301, 310,
400
逻辑是递减最右边的数字并将其增加到左边。当后者到达r
时,你将一个增加到左边并重置右边的数字(这是一个修改后的进位操作)。
该方案可以通过n
计数器实现,并推广到多项式定理。系数也可以递增计算,我不会感到惊讶。 (实际上,计数器将模拟嵌套循环。)
答案 1 :(得分:1)
您可以非常简单地删除一个循环,如下所示:
for (int i=0; i<=n; i++)
for (int j=0; j<=n-i; j++) { // Note change to upper limit
int k = n - i - j; // Calculate k rather than loop
find_coefficient(i,j,k);
set_degree_values(i,j,k);
proceed();
}