我需要一种方法来找到满足两个未知数的方程的整数。约束是两个整数都在1和10000之间。例如:
value = 21
for x in range(1, 10001):
for y in range(1, 10001):
if (3 * x) + (5 * y) == value:
x_val = x
y_val = y
break
在这种情况下,我会得到x_val = 2
和y_val = 3
。 如果没有整数解决方案或多个解决方案,则输出应为 0
我想要一个快速方法来解决这个“方程式”而不是重复迭代。这在python中可能吗?谢谢。
答案 0 :(得分:0)
这里的关键是知道方程中只有正的输入。这样,您可以缩短需要检查的数字量。例如,如果值为3000,则只需要检查1到1000而不是1到10000.您需要将等式中的变量值除以等式中的最小公分母,并将其用作上边界,减轻迭代方法的负担。
答案 1 :(得分:0)
许多解决方案,这是最简单的方法:
>>> x_val = 2
>>> y_val = 3
>>> value = 21
>>> for x in xrange(1, 10001):
... y = float(value - (x * x_val)) / y_val
... if int(y) == y and 10000 >= y >= 1:
... print ("x={}, y={}".format(int(x), int(y)))
...
x=3, y=5
x=6, y=3
x=9, y=1
示例:
for x in xrange(1, 10001):
y = float(value - (x * x_val)) / y_val
if x * x_val > value:
break
if int(y) == y and 10000 >= y >= 1:
print ("x={}, y={}".format(int(x), int(y)))
由于我们不想要负值,所以优化机会呈现出来......
reflect.TypeOf(s).Elem()