有没有更好的方法来使用数字 1 到 10 生成所有相等的算术序列?

Is there a better way to generate all equal arithmetic sequences using numbers 1 to 10?

问题:

The numbers from 1 to 10 are given. Put the equal sign(somewhere between them) and any arithmetic operator {+ - * /} so that a perfect integer equality is obtained(both the final result and the partial results must be integer)

示例:

1*2*3*4*5/6+7=8+9+10

1*2*3*4*5/6+7-8=9+10

我解决这个问题的第一个想法是使用回溯:

  1. 生成将运算符放在数字之间的所有可能性
  2. 对于这样一种可能性,用等号一个接一个地替换所有运算符,并检查我们是否有两个相等的结果

但是这个解决方案需要很多时间。

所以,我的问题是:是否有更快的解决方案,也许是使用运算符属性或其他一些很酷的数学技巧的解决方案?

我将从等号开始。选择一个可能的位置,然后在那里拆分你的序列。对于左侧和右侧,分别找到所有可能的结果,并将它们存储在字典中。稍后再匹配它们。

找到所有 226 个解决方案花费了我的 Python 程序,基于这种方法,不到 0.15 秒。所以肯定不需要进一步优化,是吗?一路上,我为一个方程的单边计算了总共 20683 个子表达式。它们相当平衡:左侧有 10327 个表达式,右侧有 10356 个表达式。

如果你想更聪明一点,你可以尝试减少甚至尝试除法的地方。为了分配无余数除法,除数的质因数必须包含在被除数​​的质因数中。因此,股息必须是某种产品,并且该产品必须包含您除以的数字因子。 2、3、5 和 7 是质数,因此它们永远不可能是这样的约数。 4 前面永远不会有两个偶数。所以唯一可能的方式是 2*3*4*5/64*5*6*7/83*4*5*6*7*8/9。但我想说的是,检查给定的除法是否可行要容易得多,不需要任何聪明。