c – 如何在没有嵌套循环的情况下实现三项式扩展.

我正在为程序简化编写程序.在这个程序中想要使用二项式和三项式定理.

使用二项式扩展:

(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个计数器实现,并推广到多项式定理.我也不会惊讶于系数也可以递增计算. (实际上,计数器将模拟嵌套循环.)

点赞