解决有限变量中的多项式方程

时间:2012-09-07 02:50:39

标签: polynomial-math

一个简单的问题。 问题是求解如下的整数多项式方程:x + y + z = num,并且假设x,y,z的int值如下:X1< = x< = X2,Y1< = y< = Y2,Z1< = z< = Z2,然后找出有多少x,y,z组合来满足该等式。 可能有更有效的算法而不是:

for(int i=X1;i<=X2;i++)
    for(int j=Y1;j<=Y2;j++)
        for(int k=Z1;k<=Z1;k++)
            if(i+j+z==num)
                print i,j,k;

我不是要求代码,而是要求创意。 感谢任何提供有用信息的人!

1 个答案:

答案 0 :(得分:1)

您的算法在O((X2-X1)(Y2-Y1)(Z2-Z1))时间内运行。

为了使它更快,你可以检查总和是否大于num,如果是,那么你可以弹出你所在的循环并增加下一个更大的循环。例如,Y循环可以读取

for(int j = Y1; j <= Y2; j++){
    if(i + j > num){
          j = Y2;
          continue;
    }
    for ( int k = Z1;...){...}
}

这会阻止算法测试一些大于num的组合,从而改善运行时间。请注意,您可以对所有三个循环执行此操作,包括仅包含到目前为止已定义的变量(此示例不测试k,因为直到第三个循环才定义k)。