2017-02-10 74 views
1

我需要一種方法來找到滿足兩個未知數的方程的整數。約束條件是這兩個整數將是1和10000之間。例如:如何找到2個「快速解決」線性方程的整數?

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中可能嗎?謝謝。

+0

什麼樣的等式? – Blender

+0

@Blender這是一個線性方程。 –

+0

使用一個單一的方程式,您無法在不迭代的情況下解決它。 –

回答

0

這裏的關鍵是要知道只有正面投入到方程中。這樣可以縮短您需要檢查的數量。例如,如果值爲3000,則只需要檢查1到1000而不是1到10000.您需要將公式中的變量值除以公式中的最小公分母,並將其用作上邊界,減少迭代方法的負擔。

0

許多解決方案,這裏是最簡單的:

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_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))) 
相關問題