如何快速找到“解决”线性方程的2个整数?

时间:2017-02-10 04:32:05

标签: python iteration equation

我需要一种方法来找到满足两个未知数的方程的整数。约束是两个整数都在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 = 2y_val = 3如果没有整数解决方案或多个解决方案,则输出应为 0

我想要一个快速方法来解决这个“方程式”而不是重复迭代。这在python中可能吗?谢谢。

2 个答案:

答案 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()