我试图在C中找到一个有效的算法,它为我提供了给定方程的所有选项。
我有公式AX + BY = M,其中A,B和M我输入(scanf)。
For example lets have: 5X + 10Y = 45
而且我还需要计算存在多少可能的选项? 一些提示,提示?
我忘了说X和Y在Z和> = 0,所以没有无限的选择。
答案 0 :(得分:3)
如果你限制为非负的未知数,这个问题就有意义了。
将等式重写为
AX = M - BY.
只要RHS为阳性,即
,就可以有正解BY ≤ M,
或
Y ≤ M/B.
然后对于给定的Y,有一个解决方案iff
A|(M - BY)
您可以在Python中将其编码为
for Y in range(M / B + 1):
if (M - B * Y) % A == 0:
X= (M - B * Y) / A
解决方案
9 0
7 1
5 2
3 3
1 4
迭代次数等于M / B
。如果A > B
,最好交换X
和Y
。
答案 1 :(得分:0)
如果您对输入值设置了一些限制,则可以计算每个解决方案,例如:在TAG POS=1 TYPE=A ATTR=DRAGGABLE:true&&DATA-DRAG-TEXT:{{artist}}&&DATA-URI:spotify:artist:* CONTENT=EVENT:MOUSEOVER
EVENT TYPE=MOUSEDOWN SELECTOR={{selArtist}} BUTTON=0
EVENT TYPE=MOUSEUP SELECTOR={{selArtist}} BUTTON=0
到X
中包含的值中使用Y
和0
。 ..通过这种方式,您可以使用9
来计算每个解决方案。
答案 2 :(得分:0)
解决方案的数量是无限的:
X=9, Y=0
。 您可以使用以下方法创建另一种解决方案:
X' = X+2*p
Y' = Y-p
适用于任何p in Z
。
这证明您的计划永远不会终止。