我正在为程序简化编写程序.在这个程序中想要使用二项式和三项式定理.
使用二项式扩展:
(x y)^ r
和(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();
}
}
所以我的问题是:如何在不循环所有可能的度数组合的情况下实现三项式扩展?
谢谢.
最佳答案 以第四度为例,三个变量的幂可以列为
004, 013, 022, 031, 040,
103, 112, 121, 130,
202, 211, 220,
301, 310,
400
逻辑是递减最右边的数字并将其增加到左边.当后者到达r时,你将它增加到左边并重置右边的数字(这是一个修改后的进位操作).
该方案可以通过n个计数器实现,并推广到多项式定理.我也不会惊讶于系数也可以递增计算. (实际上,计数器将模拟嵌套循环.)